@strapi/plugin-graphql 0.0.0-experimental.62ebf57bb35846666febb5ee2078fe02fe990f57 → 0.0.0-experimental.6340da17068c3bed7fb006e7bcc554c71129e282

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 (707) hide show
  1. package/dist/admin/index.js +58 -157
  2. package/dist/admin/index.js.map +1 -1
  3. package/dist/admin/index.mjs +54 -158
  4. package/dist/admin/index.mjs.map +1 -1
  5. package/dist/admin/package.json.js +13 -0
  6. package/dist/admin/package.json.js.map +1 -0
  7. package/dist/admin/package.json.mjs +8 -0
  8. package/dist/admin/package.json.mjs.map +1 -0
  9. package/dist/admin/pluginId.js +6 -0
  10. package/dist/admin/pluginId.js.map +1 -0
  11. package/dist/admin/pluginId.mjs +4 -0
  12. package/dist/admin/pluginId.mjs.map +1 -0
  13. package/dist/admin/src/utils/prefixPluginTranslations.d.ts +3 -0
  14. package/dist/admin/translations/cs.json.js +10 -0
  15. package/dist/admin/translations/cs.json.js.map +1 -0
  16. package/dist/admin/translations/cs.json.mjs +8 -0
  17. package/dist/admin/translations/cs.json.mjs.map +1 -0
  18. package/dist/admin/translations/da.json.js +10 -0
  19. package/dist/admin/translations/da.json.js.map +1 -0
  20. package/dist/admin/translations/da.json.mjs +8 -0
  21. package/dist/admin/translations/da.json.mjs.map +1 -0
  22. package/dist/admin/translations/en.json.js +10 -0
  23. package/dist/admin/translations/en.json.js.map +1 -0
  24. package/dist/admin/translations/en.json.mjs +8 -0
  25. package/dist/admin/translations/en.json.mjs.map +1 -0
  26. package/dist/admin/translations/es.json.js +10 -0
  27. package/dist/admin/translations/es.json.js.map +1 -0
  28. package/dist/admin/translations/es.json.mjs +8 -0
  29. package/dist/admin/translations/es.json.mjs.map +1 -0
  30. package/dist/admin/translations/fr.json.js +10 -0
  31. package/dist/admin/translations/fr.json.js.map +1 -0
  32. package/dist/admin/translations/fr.json.mjs +8 -0
  33. package/dist/admin/translations/fr.json.mjs.map +1 -0
  34. package/dist/admin/translations/pl.json.js +10 -0
  35. package/dist/admin/translations/pl.json.js.map +1 -0
  36. package/dist/admin/translations/pl.json.mjs +8 -0
  37. package/dist/admin/translations/pl.json.mjs.map +1 -0
  38. package/dist/admin/translations/ru.json.js +10 -0
  39. package/dist/admin/translations/ru.json.js.map +1 -0
  40. package/dist/admin/translations/ru.json.mjs +8 -0
  41. package/dist/admin/translations/ru.json.mjs.map +1 -0
  42. package/dist/admin/translations/sk.json.js +10 -0
  43. package/dist/admin/translations/sk.json.js.map +1 -0
  44. package/dist/admin/translations/sk.json.mjs +8 -0
  45. package/dist/admin/translations/sk.json.mjs.map +1 -0
  46. package/dist/admin/translations/sv.json.js +10 -0
  47. package/dist/admin/translations/sv.json.js.map +1 -0
  48. package/dist/admin/translations/sv.json.mjs +8 -0
  49. package/dist/admin/translations/sv.json.mjs.map +1 -0
  50. package/dist/admin/translations/tr.json.js +10 -0
  51. package/dist/admin/translations/tr.json.js.map +1 -0
  52. package/dist/admin/translations/tr.json.mjs +8 -0
  53. package/dist/admin/translations/tr.json.mjs.map +1 -0
  54. package/dist/admin/translations/uk.json.js +10 -0
  55. package/dist/admin/translations/uk.json.js.map +1 -0
  56. package/dist/admin/translations/uk.json.mjs +8 -0
  57. package/dist/admin/translations/uk.json.mjs.map +1 -0
  58. package/dist/admin/translations/zh-Hans.json.js +10 -0
  59. package/dist/admin/translations/zh-Hans.json.js.map +1 -0
  60. package/dist/admin/translations/zh-Hans.json.mjs +8 -0
  61. package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
  62. package/dist/admin/translations/zh.json.js +10 -0
  63. package/dist/admin/translations/zh.json.js.map +1 -0
  64. package/dist/admin/translations/zh.json.mjs +8 -0
  65. package/dist/admin/translations/zh.json.mjs.map +1 -0
  66. package/dist/admin/utils/prefixPluginTranslations.js +11 -0
  67. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
  68. package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
  69. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
  70. package/dist/server/bootstrap.js +221 -0
  71. package/dist/server/bootstrap.js.map +1 -0
  72. package/dist/server/bootstrap.mjs +212 -0
  73. package/dist/server/bootstrap.mjs.map +1 -0
  74. package/dist/server/config/default-config.js +13 -0
  75. package/dist/server/config/default-config.js.map +1 -0
  76. package/dist/server/config/default-config.mjs +11 -0
  77. package/dist/server/config/default-config.mjs.map +1 -0
  78. package/dist/server/config/index.js +10 -0
  79. package/dist/server/config/index.js.map +1 -0
  80. package/dist/server/config/index.mjs +8 -0
  81. package/dist/server/config/index.mjs.map +1 -0
  82. package/dist/server/format-graphql-error.js +60 -0
  83. package/dist/server/format-graphql-error.js.map +1 -0
  84. package/dist/server/format-graphql-error.mjs +58 -0
  85. package/dist/server/format-graphql-error.mjs.map +1 -0
  86. package/dist/server/index.js +12 -2963
  87. package/dist/server/index.js.map +1 -1
  88. package/dist/server/index.mjs +11 -2945
  89. package/dist/server/index.mjs.map +1 -1
  90. package/dist/server/services/builders/dynamic-zones.js +75 -0
  91. package/dist/server/services/builders/dynamic-zones.js.map +1 -0
  92. package/dist/server/services/builders/dynamic-zones.mjs +73 -0
  93. package/dist/server/services/builders/dynamic-zones.mjs.map +1 -0
  94. package/dist/server/services/builders/entity.js +38 -0
  95. package/dist/server/services/builders/entity.js.map +1 -0
  96. package/dist/server/services/builders/entity.mjs +36 -0
  97. package/dist/server/services/builders/entity.mjs.map +1 -0
  98. package/dist/server/services/builders/enums.js +24 -0
  99. package/dist/server/services/builders/enums.js.map +1 -0
  100. package/dist/server/services/builders/enums.mjs +22 -0
  101. package/dist/server/services/builders/enums.mjs.map +1 -0
  102. package/dist/server/services/builders/filters/content-type.js +94 -0
  103. package/dist/server/services/builders/filters/content-type.js.map +1 -0
  104. package/dist/server/services/builders/filters/content-type.mjs +92 -0
  105. package/dist/server/services/builders/filters/content-type.mjs.map +1 -0
  106. package/dist/server/services/builders/filters/index.js +10 -0
  107. package/dist/server/services/builders/filters/index.js.map +1 -0
  108. package/dist/server/services/builders/filters/index.mjs +8 -0
  109. package/dist/server/services/builders/filters/index.mjs.map +1 -0
  110. package/dist/server/services/builders/filters/operators/and.js +17 -0
  111. package/dist/server/services/builders/filters/operators/and.js.map +1 -0
  112. package/dist/server/services/builders/filters/operators/and.mjs +15 -0
  113. package/dist/server/services/builders/filters/operators/and.mjs.map +1 -0
  114. package/dist/server/services/builders/filters/operators/between.js +17 -0
  115. package/dist/server/services/builders/filters/operators/between.js.map +1 -0
  116. package/dist/server/services/builders/filters/operators/between.mjs +15 -0
  117. package/dist/server/services/builders/filters/operators/between.mjs.map +1 -0
  118. package/dist/server/services/builders/filters/operators/contains.js +15 -0
  119. package/dist/server/services/builders/filters/operators/contains.js.map +1 -0
  120. package/dist/server/services/builders/filters/operators/contains.mjs +13 -0
  121. package/dist/server/services/builders/filters/operators/contains.mjs.map +1 -0
  122. package/dist/server/services/builders/filters/operators/containsi.js +15 -0
  123. package/dist/server/services/builders/filters/operators/containsi.js.map +1 -0
  124. package/dist/server/services/builders/filters/operators/containsi.mjs +13 -0
  125. package/dist/server/services/builders/filters/operators/containsi.mjs.map +1 -0
  126. package/dist/server/services/builders/filters/operators/ends-with.js +15 -0
  127. package/dist/server/services/builders/filters/operators/ends-with.js.map +1 -0
  128. package/dist/server/services/builders/filters/operators/ends-with.mjs +13 -0
  129. package/dist/server/services/builders/filters/operators/ends-with.mjs.map +1 -0
  130. package/dist/server/services/builders/filters/operators/eq.js +22 -0
  131. package/dist/server/services/builders/filters/operators/eq.js.map +1 -0
  132. package/dist/server/services/builders/filters/operators/eq.mjs +20 -0
  133. package/dist/server/services/builders/filters/operators/eq.mjs.map +1 -0
  134. package/dist/server/services/builders/filters/operators/eqi.js +15 -0
  135. package/dist/server/services/builders/filters/operators/eqi.js.map +1 -0
  136. package/dist/server/services/builders/filters/operators/eqi.mjs +13 -0
  137. package/dist/server/services/builders/filters/operators/eqi.mjs.map +1 -0
  138. package/dist/server/services/builders/filters/operators/gt.js +15 -0
  139. package/dist/server/services/builders/filters/operators/gt.js.map +1 -0
  140. package/dist/server/services/builders/filters/operators/gt.mjs +13 -0
  141. package/dist/server/services/builders/filters/operators/gt.mjs.map +1 -0
  142. package/dist/server/services/builders/filters/operators/gte.js +15 -0
  143. package/dist/server/services/builders/filters/operators/gte.js.map +1 -0
  144. package/dist/server/services/builders/filters/operators/gte.mjs +13 -0
  145. package/dist/server/services/builders/filters/operators/gte.mjs.map +1 -0
  146. package/dist/server/services/builders/filters/operators/in.js +17 -0
  147. package/dist/server/services/builders/filters/operators/in.js.map +1 -0
  148. package/dist/server/services/builders/filters/operators/in.mjs +15 -0
  149. package/dist/server/services/builders/filters/operators/in.mjs.map +1 -0
  150. package/dist/server/services/builders/filters/operators/index.js +57 -0
  151. package/dist/server/services/builders/filters/operators/index.js.map +1 -0
  152. package/dist/server/services/builders/filters/operators/index.mjs +55 -0
  153. package/dist/server/services/builders/filters/operators/index.mjs.map +1 -0
  154. package/dist/server/services/builders/filters/operators/lt.js +15 -0
  155. package/dist/server/services/builders/filters/operators/lt.js.map +1 -0
  156. package/dist/server/services/builders/filters/operators/lt.mjs +13 -0
  157. package/dist/server/services/builders/filters/operators/lt.mjs.map +1 -0
  158. package/dist/server/services/builders/filters/operators/lte.js +15 -0
  159. package/dist/server/services/builders/filters/operators/lte.js.map +1 -0
  160. package/dist/server/services/builders/filters/operators/lte.mjs +13 -0
  161. package/dist/server/services/builders/filters/operators/lte.mjs.map +1 -0
  162. package/dist/server/services/builders/filters/operators/ne.js +15 -0
  163. package/dist/server/services/builders/filters/operators/ne.js.map +1 -0
  164. package/dist/server/services/builders/filters/operators/ne.mjs +13 -0
  165. package/dist/server/services/builders/filters/operators/ne.mjs.map +1 -0
  166. package/dist/server/services/builders/filters/operators/nei.js +15 -0
  167. package/dist/server/services/builders/filters/operators/nei.js.map +1 -0
  168. package/dist/server/services/builders/filters/operators/nei.mjs +13 -0
  169. package/dist/server/services/builders/filters/operators/nei.mjs.map +1 -0
  170. package/dist/server/services/builders/filters/operators/not-contains.js +15 -0
  171. package/dist/server/services/builders/filters/operators/not-contains.js.map +1 -0
  172. package/dist/server/services/builders/filters/operators/not-contains.mjs +13 -0
  173. package/dist/server/services/builders/filters/operators/not-contains.mjs.map +1 -0
  174. package/dist/server/services/builders/filters/operators/not-containsi.js +15 -0
  175. package/dist/server/services/builders/filters/operators/not-containsi.js.map +1 -0
  176. package/dist/server/services/builders/filters/operators/not-containsi.mjs +13 -0
  177. package/dist/server/services/builders/filters/operators/not-containsi.mjs.map +1 -0
  178. package/dist/server/services/builders/filters/operators/not-in.js +17 -0
  179. package/dist/server/services/builders/filters/operators/not-in.js.map +1 -0
  180. package/dist/server/services/builders/filters/operators/not-in.mjs +15 -0
  181. package/dist/server/services/builders/filters/operators/not-in.mjs.map +1 -0
  182. package/dist/server/services/builders/filters/operators/not-null.js +13 -0
  183. package/dist/server/services/builders/filters/operators/not-null.js.map +1 -0
  184. package/dist/server/services/builders/filters/operators/not-null.mjs +11 -0
  185. package/dist/server/services/builders/filters/operators/not-null.mjs.map +1 -0
  186. package/dist/server/services/builders/filters/operators/not.js +24 -0
  187. package/dist/server/services/builders/filters/operators/not.js.map +1 -0
  188. package/dist/server/services/builders/filters/operators/not.mjs +22 -0
  189. package/dist/server/services/builders/filters/operators/not.mjs.map +1 -0
  190. package/dist/server/services/builders/filters/operators/null.js +13 -0
  191. package/dist/server/services/builders/filters/operators/null.js.map +1 -0
  192. package/dist/server/services/builders/filters/operators/null.mjs +11 -0
  193. package/dist/server/services/builders/filters/operators/null.mjs.map +1 -0
  194. package/dist/server/services/builders/filters/operators/or.js +17 -0
  195. package/dist/server/services/builders/filters/operators/or.js.map +1 -0
  196. package/dist/server/services/builders/filters/operators/or.mjs +15 -0
  197. package/dist/server/services/builders/filters/operators/or.mjs.map +1 -0
  198. package/dist/server/services/builders/filters/operators/starts-with.js +15 -0
  199. package/dist/server/services/builders/filters/operators/starts-with.js.map +1 -0
  200. package/dist/server/services/builders/filters/operators/starts-with.mjs +13 -0
  201. package/dist/server/services/builders/filters/operators/starts-with.mjs.map +1 -0
  202. package/dist/server/services/builders/generic-morph.js +38 -0
  203. package/dist/server/services/builders/generic-morph.js.map +1 -0
  204. package/dist/server/services/builders/generic-morph.mjs +36 -0
  205. package/dist/server/services/builders/generic-morph.mjs.map +1 -0
  206. package/dist/server/services/builders/index.js +75 -0
  207. package/dist/server/services/builders/index.js.map +1 -0
  208. package/dist/server/services/builders/index.mjs +73 -0
  209. package/dist/server/services/builders/index.mjs.map +1 -0
  210. package/dist/server/services/builders/input.js +89 -0
  211. package/dist/server/services/builders/input.js.map +1 -0
  212. package/dist/server/services/builders/input.mjs +87 -0
  213. package/dist/server/services/builders/input.mjs.map +1 -0
  214. package/dist/server/services/builders/mutations/collection-type.js +155 -0
  215. package/dist/server/services/builders/mutations/collection-type.js.map +1 -0
  216. package/dist/server/services/builders/mutations/collection-type.mjs +153 -0
  217. package/dist/server/services/builders/mutations/collection-type.mjs.map +1 -0
  218. package/dist/server/services/builders/mutations/index.js +12 -0
  219. package/dist/server/services/builders/mutations/index.js.map +1 -0
  220. package/dist/server/services/builders/mutations/index.mjs +10 -0
  221. package/dist/server/services/builders/mutations/index.mjs.map +1 -0
  222. package/dist/server/services/builders/mutations/single-type.js +123 -0
  223. package/dist/server/services/builders/mutations/single-type.js.map +1 -0
  224. package/dist/server/services/builders/mutations/single-type.mjs +121 -0
  225. package/dist/server/services/builders/mutations/single-type.mjs.map +1 -0
  226. package/dist/server/services/builders/queries/collection-type.js +152 -0
  227. package/dist/server/services/builders/queries/collection-type.js.map +1 -0
  228. package/dist/server/services/builders/queries/collection-type.mjs +150 -0
  229. package/dist/server/services/builders/queries/collection-type.mjs.map +1 -0
  230. package/dist/server/services/builders/queries/index.js +12 -0
  231. package/dist/server/services/builders/queries/index.js.map +1 -0
  232. package/dist/server/services/builders/queries/index.mjs +10 -0
  233. package/dist/server/services/builders/queries/index.mjs.map +1 -0
  234. package/dist/server/services/builders/queries/single-type.js +70 -0
  235. package/dist/server/services/builders/queries/single-type.js.map +1 -0
  236. package/dist/server/services/builders/queries/single-type.mjs +68 -0
  237. package/dist/server/services/builders/queries/single-type.mjs.map +1 -0
  238. package/dist/server/services/builders/relation-response-collection.js +35 -0
  239. package/dist/server/services/builders/relation-response-collection.js.map +1 -0
  240. package/dist/server/services/builders/relation-response-collection.mjs +33 -0
  241. package/dist/server/services/builders/relation-response-collection.mjs.map +1 -0
  242. package/dist/server/services/builders/resolvers/association.js +141 -0
  243. package/dist/server/services/builders/resolvers/association.js.map +1 -0
  244. package/dist/server/services/builders/resolvers/association.mjs +139 -0
  245. package/dist/server/services/builders/resolvers/association.mjs.map +1 -0
  246. package/dist/server/services/builders/resolvers/component.js +27 -0
  247. package/dist/server/services/builders/resolvers/component.js.map +1 -0
  248. package/dist/server/services/builders/resolvers/component.mjs +25 -0
  249. package/dist/server/services/builders/resolvers/component.mjs.map +1 -0
  250. package/dist/server/services/builders/resolvers/dynamic-zone.js +12 -0
  251. package/dist/server/services/builders/resolvers/dynamic-zone.js.map +1 -0
  252. package/dist/server/services/builders/resolvers/dynamic-zone.mjs +10 -0
  253. package/dist/server/services/builders/resolvers/dynamic-zone.mjs.map +1 -0
  254. package/dist/server/services/builders/resolvers/index.js +20 -0
  255. package/dist/server/services/builders/resolvers/index.js.map +1 -0
  256. package/dist/server/services/builders/resolvers/index.mjs +18 -0
  257. package/dist/server/services/builders/resolvers/index.mjs.map +1 -0
  258. package/dist/server/services/builders/resolvers/merge-publication-args.js +23 -0
  259. package/dist/server/services/builders/resolvers/merge-publication-args.js.map +1 -0
  260. package/dist/server/services/builders/resolvers/merge-publication-args.mjs +21 -0
  261. package/dist/server/services/builders/resolvers/merge-publication-args.mjs.map +1 -0
  262. package/dist/server/services/builders/resolvers/pagination.js +40 -0
  263. package/dist/server/services/builders/resolvers/pagination.js.map +1 -0
  264. package/dist/server/services/builders/resolvers/pagination.mjs +38 -0
  265. package/dist/server/services/builders/resolvers/pagination.mjs.map +1 -0
  266. package/dist/server/services/builders/resolvers/query.js +62 -0
  267. package/dist/server/services/builders/resolvers/query.js.map +1 -0
  268. package/dist/server/services/builders/resolvers/query.mjs +60 -0
  269. package/dist/server/services/builders/resolvers/query.mjs.map +1 -0
  270. package/dist/server/services/builders/response-collection.js +50 -0
  271. package/dist/server/services/builders/response-collection.js.map +1 -0
  272. package/dist/server/services/builders/response-collection.mjs +48 -0
  273. package/dist/server/services/builders/response-collection.mjs.map +1 -0
  274. package/dist/server/services/builders/response.js +28 -0
  275. package/dist/server/services/builders/response.js.map +1 -0
  276. package/dist/server/services/builders/response.mjs +26 -0
  277. package/dist/server/services/builders/response.mjs.map +1 -0
  278. package/dist/server/services/builders/type.js +345 -0
  279. package/dist/server/services/builders/type.js.map +1 -0
  280. package/dist/server/services/builders/type.mjs +343 -0
  281. package/dist/server/services/builders/type.mjs.map +1 -0
  282. package/dist/server/services/builders/utils.js +132 -0
  283. package/dist/server/services/builders/utils.js.map +1 -0
  284. package/dist/server/services/builders/utils.mjs +130 -0
  285. package/dist/server/services/builders/utils.mjs.map +1 -0
  286. package/dist/server/services/constants.js +141 -0
  287. package/dist/server/services/constants.js.map +1 -0
  288. package/dist/server/services/constants.mjs +139 -0
  289. package/dist/server/services/constants.mjs.map +1 -0
  290. package/dist/server/services/content-api/index.js +198 -0
  291. package/dist/server/services/content-api/index.js.map +1 -0
  292. package/dist/server/services/content-api/index.mjs +196 -0
  293. package/dist/server/services/content-api/index.mjs.map +1 -0
  294. package/dist/server/services/content-api/policy.js +54 -0
  295. package/dist/server/services/content-api/policy.js.map +1 -0
  296. package/dist/server/services/content-api/policy.mjs +52 -0
  297. package/dist/server/services/content-api/policy.mjs.map +1 -0
  298. package/dist/server/services/content-api/register-functions/collection-type.js +41 -0
  299. package/dist/server/services/content-api/register-functions/collection-type.js.map +1 -0
  300. package/dist/server/services/content-api/register-functions/collection-type.mjs +39 -0
  301. package/dist/server/services/content-api/register-functions/collection-type.mjs.map +1 -0
  302. package/dist/server/services/content-api/register-functions/component.js +16 -0
  303. package/dist/server/services/content-api/register-functions/component.js.map +1 -0
  304. package/dist/server/services/content-api/register-functions/component.mjs +14 -0
  305. package/dist/server/services/content-api/register-functions/component.mjs.map +1 -0
  306. package/dist/server/services/content-api/register-functions/dynamic-zones.js +31 -0
  307. package/dist/server/services/content-api/register-functions/dynamic-zones.js.map +1 -0
  308. package/dist/server/services/content-api/register-functions/dynamic-zones.mjs +29 -0
  309. package/dist/server/services/content-api/register-functions/dynamic-zones.mjs.map +1 -0
  310. package/dist/server/services/content-api/register-functions/enums.js +23 -0
  311. package/dist/server/services/content-api/register-functions/enums.js.map +1 -0
  312. package/dist/server/services/content-api/register-functions/enums.mjs +21 -0
  313. package/dist/server/services/content-api/register-functions/enums.mjs.map +1 -0
  314. package/dist/server/services/content-api/register-functions/filters.js +16 -0
  315. package/dist/server/services/content-api/register-functions/filters.js.map +1 -0
  316. package/dist/server/services/content-api/register-functions/filters.mjs +14 -0
  317. package/dist/server/services/content-api/register-functions/filters.mjs.map +1 -0
  318. package/dist/server/services/content-api/register-functions/inputs.js +17 -0
  319. package/dist/server/services/content-api/register-functions/inputs.js.map +1 -0
  320. package/dist/server/services/content-api/register-functions/inputs.mjs +15 -0
  321. package/dist/server/services/content-api/register-functions/inputs.mjs.map +1 -0
  322. package/dist/server/services/content-api/register-functions/internals.js +16 -0
  323. package/dist/server/services/content-api/register-functions/internals.js.map +1 -0
  324. package/dist/server/services/content-api/register-functions/internals.mjs +14 -0
  325. package/dist/server/services/content-api/register-functions/internals.mjs.map +1 -0
  326. package/dist/server/services/content-api/register-functions/polymorphic.js +49 -0
  327. package/dist/server/services/content-api/register-functions/polymorphic.js.map +1 -0
  328. package/dist/server/services/content-api/register-functions/polymorphic.mjs +47 -0
  329. package/dist/server/services/content-api/register-functions/polymorphic.mjs.map +1 -0
  330. package/dist/server/services/content-api/register-functions/scalars.js +15 -0
  331. package/dist/server/services/content-api/register-functions/scalars.js.map +1 -0
  332. package/dist/server/services/content-api/register-functions/scalars.mjs +13 -0
  333. package/dist/server/services/content-api/register-functions/scalars.mjs.map +1 -0
  334. package/dist/server/services/content-api/register-functions/single-type.js +41 -0
  335. package/dist/server/services/content-api/register-functions/single-type.js.map +1 -0
  336. package/dist/server/services/content-api/register-functions/single-type.mjs +39 -0
  337. package/dist/server/services/content-api/register-functions/single-type.mjs.map +1 -0
  338. package/dist/server/services/content-api/wrap-resolvers.js +119 -0
  339. package/dist/server/services/content-api/wrap-resolvers.js.map +1 -0
  340. package/dist/server/services/content-api/wrap-resolvers.mjs +117 -0
  341. package/dist/server/services/content-api/wrap-resolvers.mjs.map +1 -0
  342. package/dist/server/services/extension/extension.js +85 -0
  343. package/dist/server/services/extension/extension.js.map +1 -0
  344. package/dist/server/services/extension/extension.mjs +63 -0
  345. package/dist/server/services/extension/extension.mjs.map +1 -0
  346. package/dist/server/services/extension/index.js +8 -0
  347. package/dist/server/services/extension/index.js.map +1 -0
  348. package/dist/server/services/extension/index.mjs +6 -0
  349. package/dist/server/services/extension/index.mjs.map +1 -0
  350. package/dist/server/services/extension/shadow-crud-manager.js +121 -0
  351. package/dist/server/services/extension/shadow-crud-manager.js.map +1 -0
  352. package/dist/server/services/extension/shadow-crud-manager.mjs +119 -0
  353. package/dist/server/services/extension/shadow-crud-manager.mjs.map +1 -0
  354. package/dist/server/services/format/index.js +10 -0
  355. package/dist/server/services/format/index.js.map +1 -0
  356. package/dist/server/services/format/index.mjs +8 -0
  357. package/dist/server/services/format/index.mjs.map +1 -0
  358. package/dist/server/services/format/return-types.js +27 -0
  359. package/dist/server/services/format/return-types.js.map +1 -0
  360. package/dist/server/services/format/return-types.mjs +25 -0
  361. package/dist/server/services/format/return-types.mjs.map +1 -0
  362. package/dist/server/services/index.js +24 -0
  363. package/dist/server/services/index.js.map +1 -0
  364. package/dist/server/services/index.mjs +22 -0
  365. package/dist/server/services/index.mjs.map +1 -0
  366. package/dist/server/services/internals/args/has-published-version.js +11 -0
  367. package/dist/server/services/internals/args/has-published-version.js.map +1 -0
  368. package/dist/server/services/internals/args/has-published-version.mjs +9 -0
  369. package/dist/server/services/internals/args/has-published-version.mjs.map +1 -0
  370. package/dist/server/services/internals/args/index.js +18 -0
  371. package/dist/server/services/internals/args/index.js.map +1 -0
  372. package/dist/server/services/internals/args/index.mjs +16 -0
  373. package/dist/server/services/internals/args/index.mjs.map +1 -0
  374. package/dist/server/services/internals/args/pagination.js +20 -0
  375. package/dist/server/services/internals/args/pagination.js.map +1 -0
  376. package/dist/server/services/internals/args/pagination.mjs +18 -0
  377. package/dist/server/services/internals/args/pagination.mjs.map +1 -0
  378. package/dist/server/services/internals/args/publication-filter.js +13 -0
  379. package/dist/server/services/internals/args/publication-filter.js.map +1 -0
  380. package/dist/server/services/internals/args/publication-filter.mjs +11 -0
  381. package/dist/server/services/internals/args/publication-filter.mjs.map +1 -0
  382. package/dist/server/services/internals/args/publication-status.js +14 -0
  383. package/dist/server/services/internals/args/publication-status.js.map +1 -0
  384. package/dist/server/services/internals/args/publication-status.mjs +12 -0
  385. package/dist/server/services/internals/args/publication-status.mjs.map +1 -0
  386. package/dist/server/services/internals/args/sort.js +11 -0
  387. package/dist/server/services/internals/args/sort.js.map +1 -0
  388. package/dist/server/services/internals/args/sort.mjs +9 -0
  389. package/dist/server/services/internals/args/sort.mjs.map +1 -0
  390. package/dist/server/services/internals/helpers/get-enabled-scalars.js +13 -0
  391. package/dist/server/services/internals/helpers/get-enabled-scalars.js.map +1 -0
  392. package/dist/server/services/internals/helpers/get-enabled-scalars.mjs +11 -0
  393. package/dist/server/services/internals/helpers/get-enabled-scalars.mjs.map +1 -0
  394. package/dist/server/services/internals/helpers/index.js +10 -0
  395. package/dist/server/services/internals/helpers/index.js.map +1 -0
  396. package/dist/server/services/internals/helpers/index.mjs +8 -0
  397. package/dist/server/services/internals/helpers/index.mjs.map +1 -0
  398. package/dist/server/services/internals/index.js +16 -0
  399. package/dist/server/services/internals/index.js.map +1 -0
  400. package/dist/server/services/internals/index.mjs +14 -0
  401. package/dist/server/services/internals/index.mjs.map +1 -0
  402. package/dist/server/services/internals/scalars/date.js +18 -0
  403. package/dist/server/services/internals/scalars/date.js.map +1 -0
  404. package/dist/server/services/internals/scalars/date.mjs +15 -0
  405. package/dist/server/services/internals/scalars/date.mjs.map +1 -0
  406. package/dist/server/services/internals/scalars/index.js +17 -0
  407. package/dist/server/services/internals/scalars/index.js.map +1 -0
  408. package/dist/server/services/internals/scalars/index.mjs +15 -0
  409. package/dist/server/services/internals/scalars/index.mjs.map +1 -0
  410. package/dist/server/services/internals/scalars/time.js +38 -0
  411. package/dist/server/services/internals/scalars/time.js.map +1 -0
  412. package/dist/server/services/internals/scalars/time.mjs +36 -0
  413. package/dist/server/services/internals/scalars/time.mjs.map +1 -0
  414. package/dist/server/services/internals/types/delete-mutation-response.js +18 -0
  415. package/dist/server/services/internals/types/delete-mutation-response.js.map +1 -0
  416. package/dist/server/services/internals/types/delete-mutation-response.mjs +16 -0
  417. package/dist/server/services/internals/types/delete-mutation-response.mjs.map +1 -0
  418. package/dist/server/services/internals/types/error.js +32 -0
  419. package/dist/server/services/internals/types/error.js.map +1 -0
  420. package/dist/server/services/internals/types/error.mjs +30 -0
  421. package/dist/server/services/internals/types/error.mjs.map +1 -0
  422. package/dist/server/services/internals/types/filters.js +35 -0
  423. package/dist/server/services/internals/types/filters.js.map +1 -0
  424. package/dist/server/services/internals/types/filters.mjs +33 -0
  425. package/dist/server/services/internals/types/filters.mjs.map +1 -0
  426. package/dist/server/services/internals/types/index.js +32 -0
  427. package/dist/server/services/internals/types/index.js.map +1 -0
  428. package/dist/server/services/internals/types/index.mjs +30 -0
  429. package/dist/server/services/internals/types/index.mjs.map +1 -0
  430. package/dist/server/services/internals/types/pagination.js +24 -0
  431. package/dist/server/services/internals/types/pagination.js.map +1 -0
  432. package/dist/server/services/internals/types/pagination.mjs +22 -0
  433. package/dist/server/services/internals/types/pagination.mjs.map +1 -0
  434. package/dist/server/services/internals/types/publication-filter.js +25 -0
  435. package/dist/server/services/internals/types/publication-filter.js.map +1 -0
  436. package/dist/server/services/internals/types/publication-filter.mjs +23 -0
  437. package/dist/server/services/internals/types/publication-filter.mjs.map +1 -0
  438. package/dist/server/services/internals/types/publication-status.js +22 -0
  439. package/dist/server/services/internals/types/publication-status.js.map +1 -0
  440. package/dist/server/services/internals/types/publication-status.mjs +20 -0
  441. package/dist/server/services/internals/types/publication-status.mjs.map +1 -0
  442. package/dist/server/services/internals/types/response-collection-meta.js +27 -0
  443. package/dist/server/services/internals/types/response-collection-meta.js.map +1 -0
  444. package/dist/server/services/internals/types/response-collection-meta.mjs +25 -0
  445. package/dist/server/services/internals/types/response-collection-meta.mjs.map +1 -0
  446. package/dist/server/services/type-registry.js +81 -0
  447. package/dist/server/services/type-registry.js.map +1 -0
  448. package/dist/server/services/type-registry.mjs +79 -0
  449. package/dist/server/services/type-registry.mjs.map +1 -0
  450. package/dist/server/services/utils/attributes.js +65 -0
  451. package/dist/server/services/utils/attributes.js.map +1 -0
  452. package/dist/server/services/utils/attributes.mjs +63 -0
  453. package/dist/server/services/utils/attributes.mjs.map +1 -0
  454. package/dist/server/services/utils/index.js +16 -0
  455. package/dist/server/services/utils/index.js.map +1 -0
  456. package/dist/server/services/utils/index.mjs +14 -0
  457. package/dist/server/services/utils/index.mjs.map +1 -0
  458. package/dist/server/services/utils/mappers/entity-to-response-entity.js +16 -0
  459. package/dist/server/services/utils/mappers/entity-to-response-entity.js.map +1 -0
  460. package/dist/server/services/utils/mappers/entity-to-response-entity.mjs +14 -0
  461. package/dist/server/services/utils/mappers/entity-to-response-entity.mjs.map +1 -0
  462. package/dist/server/services/utils/mappers/graphql-filters-to-strapi-query.js +95 -0
  463. package/dist/server/services/utils/mappers/graphql-filters-to-strapi-query.js.map +1 -0
  464. package/dist/server/services/utils/mappers/graphql-filters-to-strapi-query.mjs +93 -0
  465. package/dist/server/services/utils/mappers/graphql-filters-to-strapi-query.mjs.map +1 -0
  466. package/dist/server/services/utils/mappers/graphql-scalar-to-operators.js +15 -0
  467. package/dist/server/services/utils/mappers/graphql-scalar-to-operators.js.map +1 -0
  468. package/dist/server/services/utils/mappers/graphql-scalar-to-operators.mjs +13 -0
  469. package/dist/server/services/utils/mappers/graphql-scalar-to-operators.mjs.map +1 -0
  470. package/dist/server/services/utils/mappers/index.js +16 -0
  471. package/dist/server/services/utils/mappers/index.js.map +1 -0
  472. package/dist/server/services/utils/mappers/index.mjs +14 -0
  473. package/dist/server/services/utils/mappers/index.mjs.map +1 -0
  474. package/dist/server/services/utils/mappers/strapi-scalar-to-graphql-scalar.js +23 -0
  475. package/dist/server/services/utils/mappers/strapi-scalar-to-graphql-scalar.js.map +1 -0
  476. package/dist/server/services/utils/mappers/strapi-scalar-to-graphql-scalar.mjs +21 -0
  477. package/dist/server/services/utils/mappers/strapi-scalar-to-graphql-scalar.mjs.map +1 -0
  478. package/dist/server/services/utils/naming.js +187 -0
  479. package/dist/server/services/utils/naming.js.map +1 -0
  480. package/dist/server/services/utils/naming.mjs +185 -0
  481. package/dist/server/services/utils/naming.mjs.map +1 -0
  482. package/dist/server/services/utils/playground.js +19 -0
  483. package/dist/server/services/utils/playground.js.map +1 -0
  484. package/dist/server/services/utils/playground.mjs +17 -0
  485. package/dist/server/services/utils/playground.mjs.map +1 -0
  486. package/dist/server/src/bootstrap.d.ts +9 -2
  487. package/dist/server/src/bootstrap.d.ts.map +1 -1
  488. package/dist/server/src/config/default-config.d.ts +1 -0
  489. package/dist/server/src/config/default-config.d.ts.map +1 -1
  490. package/dist/server/src/config/index.d.ts +1 -0
  491. package/dist/server/src/config/index.d.ts.map +1 -1
  492. package/dist/server/src/format-graphql-error.d.ts +7 -3
  493. package/dist/server/src/format-graphql-error.d.ts.map +1 -1
  494. package/dist/server/src/index.d.ts +98 -82
  495. package/dist/server/src/index.d.ts.map +1 -1
  496. package/dist/server/src/services/builders/dynamic-zones.d.ts +2 -6
  497. package/dist/server/src/services/builders/dynamic-zones.d.ts.map +1 -1
  498. package/dist/server/src/services/builders/entity.d.ts.map +1 -1
  499. package/dist/server/src/services/builders/enums.d.ts.map +1 -1
  500. package/dist/server/src/services/builders/filters/content-type.d.ts +2 -2
  501. package/dist/server/src/services/builders/filters/content-type.d.ts.map +1 -1
  502. package/dist/server/src/services/builders/filters/index.d.ts +1 -1
  503. package/dist/server/src/services/builders/filters/index.d.ts.map +1 -1
  504. package/dist/server/src/services/builders/filters/operators/and.d.ts.map +1 -1
  505. package/dist/server/src/services/builders/filters/operators/between.d.ts.map +1 -1
  506. package/dist/server/src/services/builders/filters/operators/contains.d.ts.map +1 -1
  507. package/dist/server/src/services/builders/filters/operators/containsi.d.ts.map +1 -1
  508. package/dist/server/src/services/builders/filters/operators/ends-with.d.ts.map +1 -1
  509. package/dist/server/src/services/builders/filters/operators/eq.d.ts +2 -2
  510. package/dist/server/src/services/builders/filters/operators/eq.d.ts.map +1 -1
  511. package/dist/server/src/services/builders/filters/operators/eqi.d.ts.map +1 -1
  512. package/dist/server/src/services/builders/filters/operators/gt.d.ts.map +1 -1
  513. package/dist/server/src/services/builders/filters/operators/gte.d.ts.map +1 -1
  514. package/dist/server/src/services/builders/filters/operators/in.d.ts.map +1 -1
  515. package/dist/server/src/services/builders/filters/operators/index.d.ts +2 -3
  516. package/dist/server/src/services/builders/filters/operators/index.d.ts.map +1 -1
  517. package/dist/server/src/services/builders/filters/operators/lt.d.ts.map +1 -1
  518. package/dist/server/src/services/builders/filters/operators/lte.d.ts.map +1 -1
  519. package/dist/server/src/services/builders/filters/operators/ne.d.ts.map +1 -1
  520. package/dist/server/src/services/builders/filters/operators/nei.d.ts.map +1 -1
  521. package/dist/server/src/services/builders/filters/operators/not-contains.d.ts.map +1 -1
  522. package/dist/server/src/services/builders/filters/operators/not-containsi.d.ts.map +1 -1
  523. package/dist/server/src/services/builders/filters/operators/not-in.d.ts.map +1 -1
  524. package/dist/server/src/services/builders/filters/operators/not-null.d.ts.map +1 -1
  525. package/dist/server/src/services/builders/filters/operators/not.d.ts +2 -2
  526. package/dist/server/src/services/builders/filters/operators/not.d.ts.map +1 -1
  527. package/dist/server/src/services/builders/filters/operators/null.d.ts.map +1 -1
  528. package/dist/server/src/services/builders/filters/operators/or.d.ts.map +1 -1
  529. package/dist/server/src/services/builders/filters/operators/starts-with.d.ts.map +1 -1
  530. package/dist/server/src/services/builders/generic-morph.d.ts.map +1 -1
  531. package/dist/server/src/services/builders/index.d.ts +16 -19
  532. package/dist/server/src/services/builders/index.d.ts.map +1 -1
  533. package/dist/server/src/services/builders/input.d.ts +2 -2
  534. package/dist/server/src/services/builders/input.d.ts.map +1 -1
  535. package/dist/server/src/services/builders/mutations/collection-type.d.ts +2 -2
  536. package/dist/server/src/services/builders/mutations/collection-type.d.ts.map +1 -1
  537. package/dist/server/src/services/builders/mutations/index.d.ts +2 -2
  538. package/dist/server/src/services/builders/mutations/index.d.ts.map +1 -1
  539. package/dist/server/src/services/builders/mutations/single-type.d.ts +2 -2
  540. package/dist/server/src/services/builders/mutations/single-type.d.ts.map +1 -1
  541. package/dist/server/src/services/builders/queries/collection-type.d.ts +2 -2
  542. package/dist/server/src/services/builders/queries/collection-type.d.ts.map +1 -1
  543. package/dist/server/src/services/builders/queries/index.d.ts +2 -2
  544. package/dist/server/src/services/builders/queries/index.d.ts.map +1 -1
  545. package/dist/server/src/services/builders/queries/single-type.d.ts +2 -2
  546. package/dist/server/src/services/builders/queries/single-type.d.ts.map +1 -1
  547. package/dist/server/src/services/builders/relation-response-collection.d.ts.map +1 -1
  548. package/dist/server/src/services/builders/resolvers/association.d.ts +3 -3
  549. package/dist/server/src/services/builders/resolvers/association.d.ts.map +1 -1
  550. package/dist/server/src/services/builders/resolvers/component.d.ts +2 -2
  551. package/dist/server/src/services/builders/resolvers/component.d.ts.map +1 -1
  552. package/dist/server/src/services/builders/resolvers/dynamic-zone.d.ts +2 -2
  553. package/dist/server/src/services/builders/resolvers/dynamic-zone.d.ts.map +1 -1
  554. package/dist/server/src/services/builders/resolvers/index.d.ts +14 -38
  555. package/dist/server/src/services/builders/resolvers/index.d.ts.map +1 -1
  556. package/dist/server/src/services/builders/resolvers/merge-publication-args.d.ts +9 -0
  557. package/dist/server/src/services/builders/resolvers/merge-publication-args.d.ts.map +1 -0
  558. package/dist/server/src/services/builders/resolvers/pagination.d.ts +11 -0
  559. package/dist/server/src/services/builders/resolvers/pagination.d.ts.map +1 -0
  560. package/dist/server/src/services/builders/resolvers/query.d.ts +3 -14
  561. package/dist/server/src/services/builders/resolvers/query.d.ts.map +1 -1
  562. package/dist/server/src/services/builders/response-collection.d.ts.map +1 -1
  563. package/dist/server/src/services/builders/response.d.ts.map +1 -1
  564. package/dist/server/src/services/builders/type.d.ts +2 -2
  565. package/dist/server/src/services/builders/type.d.ts.map +1 -1
  566. package/dist/server/src/services/builders/utils.d.ts +16 -25
  567. package/dist/server/src/services/builders/utils.d.ts.map +1 -1
  568. package/dist/server/src/services/constants.d.ts +3 -1
  569. package/dist/server/src/services/constants.d.ts.map +1 -1
  570. package/dist/server/src/services/content-api/index.d.ts +4 -2
  571. package/dist/server/src/services/content-api/index.d.ts.map +1 -1
  572. package/dist/server/src/services/content-api/policy.d.ts +3 -3
  573. package/dist/server/src/services/content-api/policy.d.ts.map +1 -1
  574. package/dist/server/src/services/content-api/register-functions/collection-type.d.ts +3 -3
  575. package/dist/server/src/services/content-api/register-functions/collection-type.d.ts.map +1 -1
  576. package/dist/server/src/services/content-api/register-functions/component.d.ts +3 -3
  577. package/dist/server/src/services/content-api/register-functions/component.d.ts.map +1 -1
  578. package/dist/server/src/services/content-api/register-functions/dynamic-zones.d.ts +9 -0
  579. package/dist/server/src/services/content-api/register-functions/dynamic-zones.d.ts.map +1 -0
  580. package/dist/server/src/services/content-api/register-functions/enums.d.ts +9 -0
  581. package/dist/server/src/services/content-api/register-functions/enums.d.ts.map +1 -0
  582. package/dist/server/src/services/content-api/register-functions/filters.d.ts +9 -0
  583. package/dist/server/src/services/content-api/register-functions/filters.d.ts.map +1 -0
  584. package/dist/server/src/services/content-api/register-functions/index.d.ts +5 -2
  585. package/dist/server/src/services/content-api/register-functions/index.d.ts.map +1 -1
  586. package/dist/server/src/services/content-api/register-functions/inputs.d.ts +9 -0
  587. package/dist/server/src/services/content-api/register-functions/inputs.d.ts.map +1 -0
  588. package/dist/server/src/services/content-api/register-functions/internals.d.ts.map +1 -1
  589. package/dist/server/src/services/content-api/register-functions/polymorphic.d.ts +2 -2
  590. package/dist/server/src/services/content-api/register-functions/polymorphic.d.ts.map +1 -1
  591. package/dist/server/src/services/content-api/register-functions/scalars.d.ts.map +1 -1
  592. package/dist/server/src/services/content-api/register-functions/single-type.d.ts +3 -3
  593. package/dist/server/src/services/content-api/register-functions/single-type.d.ts.map +1 -1
  594. package/dist/server/src/services/content-api/wrap-resolvers.d.ts +2 -2
  595. package/dist/server/src/services/content-api/wrap-resolvers.d.ts.map +1 -1
  596. package/dist/server/src/services/extension/extension.d.ts +13 -13
  597. package/dist/server/src/services/extension/extension.d.ts.map +1 -1
  598. package/dist/server/src/services/extension/shadow-crud-manager.d.ts +9 -9
  599. package/dist/server/src/services/extension/shadow-crud-manager.d.ts.map +1 -1
  600. package/dist/server/src/services/index.d.ts +97 -82
  601. package/dist/server/src/services/index.d.ts.map +1 -1
  602. package/dist/server/src/services/internals/args/has-published-version.d.ts +7 -0
  603. package/dist/server/src/services/internals/args/has-published-version.d.ts.map +1 -0
  604. package/dist/server/src/services/internals/args/index.d.ts +4 -1
  605. package/dist/server/src/services/internals/args/index.d.ts.map +1 -1
  606. package/dist/server/src/services/internals/args/publication-filter.d.ts +4 -0
  607. package/dist/server/src/services/internals/args/publication-filter.d.ts.map +1 -0
  608. package/dist/server/src/services/internals/args/{publication-state.d.ts → publication-status.d.ts} +1 -1
  609. package/dist/server/src/services/internals/args/publication-status.d.ts.map +1 -0
  610. package/dist/server/src/services/internals/helpers/get-enabled-scalars.d.ts.map +1 -1
  611. package/dist/server/src/services/internals/helpers/index.d.ts.map +1 -1
  612. package/dist/server/src/services/internals/index.d.ts +21 -10
  613. package/dist/server/src/services/internals/index.d.ts.map +1 -1
  614. package/dist/server/src/services/internals/scalars/index.d.ts +4 -5
  615. package/dist/server/src/services/internals/scalars/index.d.ts.map +1 -1
  616. package/dist/server/src/services/internals/scalars/time.d.ts +1 -1
  617. package/dist/server/src/services/internals/scalars/time.d.ts.map +1 -1
  618. package/dist/server/src/services/internals/types/delete-mutation-response.d.ts +6 -0
  619. package/dist/server/src/services/internals/types/delete-mutation-response.d.ts.map +1 -0
  620. package/dist/server/src/services/internals/types/error.d.ts.map +1 -1
  621. package/dist/server/src/services/internals/types/filters.d.ts.map +1 -1
  622. package/dist/server/src/services/internals/types/index.d.ts +14 -4
  623. package/dist/server/src/services/internals/types/index.d.ts.map +1 -1
  624. package/dist/server/src/services/internals/types/pagination.d.ts.map +1 -1
  625. package/dist/server/src/services/internals/types/publication-filter.d.ts +6 -0
  626. package/dist/server/src/services/internals/types/publication-filter.d.ts.map +1 -0
  627. package/dist/server/src/services/internals/types/publication-status.d.ts +10 -0
  628. package/dist/server/src/services/internals/types/publication-status.d.ts.map +1 -0
  629. package/dist/server/src/services/internals/types/response-collection-meta.d.ts.map +1 -1
  630. package/dist/server/src/services/type-registry.d.ts.map +1 -1
  631. package/dist/server/src/services/types.d.ts +2 -2
  632. package/dist/server/src/services/types.d.ts.map +1 -1
  633. package/dist/server/src/services/utils/attributes.d.ts +4 -4
  634. package/dist/server/src/services/utils/attributes.d.ts.map +1 -1
  635. package/dist/server/src/services/utils/index.d.ts +44 -41
  636. package/dist/server/src/services/utils/index.d.ts.map +1 -1
  637. package/dist/server/src/services/utils/mappers/entity-to-response-entity.d.ts +8 -10
  638. package/dist/server/src/services/utils/mappers/entity-to-response-entity.d.ts.map +1 -1
  639. package/dist/server/src/services/utils/mappers/graphql-filters-to-strapi-query.d.ts +2 -2
  640. package/dist/server/src/services/utils/mappers/graphql-filters-to-strapi-query.d.ts.map +1 -1
  641. package/dist/server/src/services/utils/mappers/graphql-scalar-to-operators.d.ts.map +1 -1
  642. package/dist/server/src/services/utils/mappers/index.d.ts +8 -10
  643. package/dist/server/src/services/utils/mappers/index.d.ts.map +1 -1
  644. package/dist/server/src/services/utils/mappers/strapi-scalar-to-graphql-scalar.d.ts.map +1 -1
  645. package/dist/server/src/services/utils/naming.d.ts +28 -27
  646. package/dist/server/src/services/utils/naming.d.ts.map +1 -1
  647. package/dist/server/src/services/utils/playground.d.ts +7 -0
  648. package/dist/server/src/services/utils/playground.d.ts.map +1 -0
  649. package/package.json +42 -32
  650. package/dist/_chunks/dk-KmLnUoJC.mjs +0 -9
  651. package/dist/_chunks/dk-KmLnUoJC.mjs.map +0 -1
  652. package/dist/_chunks/dk-SLrLqAtl.js +0 -9
  653. package/dist/_chunks/dk-SLrLqAtl.js.map +0 -1
  654. package/dist/_chunks/en-A16mqbIV.mjs +0 -9
  655. package/dist/_chunks/en-A16mqbIV.mjs.map +0 -1
  656. package/dist/_chunks/en-WmmC2MW8.js +0 -9
  657. package/dist/_chunks/en-WmmC2MW8.js.map +0 -1
  658. package/dist/_chunks/es-4tl6ikyU.js +0 -9
  659. package/dist/_chunks/es-4tl6ikyU.js.map +0 -1
  660. package/dist/_chunks/es-_xZ14QXK.mjs +0 -9
  661. package/dist/_chunks/es-_xZ14QXK.mjs.map +0 -1
  662. package/dist/_chunks/fr-4BkQ-Qvt.mjs +0 -9
  663. package/dist/_chunks/fr-4BkQ-Qvt.mjs.map +0 -1
  664. package/dist/_chunks/fr-cJXSt55N.js +0 -9
  665. package/dist/_chunks/fr-cJXSt55N.js.map +0 -1
  666. package/dist/_chunks/pl-TWurBBP_.mjs +0 -9
  667. package/dist/_chunks/pl-TWurBBP_.mjs.map +0 -1
  668. package/dist/_chunks/pl-wKw9Xgkw.js +0 -9
  669. package/dist/_chunks/pl-wKw9Xgkw.js.map +0 -1
  670. package/dist/_chunks/ru-CYAnXR6L.js +0 -9
  671. package/dist/_chunks/ru-CYAnXR6L.js.map +0 -1
  672. package/dist/_chunks/ru-aD804UEo.mjs +0 -9
  673. package/dist/_chunks/ru-aD804UEo.mjs.map +0 -1
  674. package/dist/_chunks/sv-N5RufX6w.mjs +0 -9
  675. package/dist/_chunks/sv-N5RufX6w.mjs.map +0 -1
  676. package/dist/_chunks/sv-XNOe1ctV.js +0 -9
  677. package/dist/_chunks/sv-XNOe1ctV.js.map +0 -1
  678. package/dist/_chunks/tr-POFbAHUC.js +0 -9
  679. package/dist/_chunks/tr-POFbAHUC.js.map +0 -1
  680. package/dist/_chunks/tr-UmSHgD8y.mjs +0 -9
  681. package/dist/_chunks/tr-UmSHgD8y.mjs.map +0 -1
  682. package/dist/_chunks/zh-Hans-ClgXy4wM.mjs +0 -9
  683. package/dist/_chunks/zh-Hans-ClgXy4wM.mjs.map +0 -1
  684. package/dist/_chunks/zh-Hans-pnigVFnS.js +0 -9
  685. package/dist/_chunks/zh-Hans-pnigVFnS.js.map +0 -1
  686. package/dist/_chunks/zh-KvwXXMnA.mjs +0 -9
  687. package/dist/_chunks/zh-KvwXXMnA.mjs.map +0 -1
  688. package/dist/_chunks/zh-kJ_DkSIe.js +0 -9
  689. package/dist/_chunks/zh-kJ_DkSIe.js.map +0 -1
  690. package/dist/server/src/services/builders/entity-meta.d.ts +0 -6
  691. package/dist/server/src/services/builders/entity-meta.d.ts.map +0 -1
  692. package/dist/server/src/services/builders/resolvers/mutation.d.ts +0 -25
  693. package/dist/server/src/services/builders/resolvers/mutation.d.ts.map +0 -1
  694. package/dist/server/src/services/content-api/register-functions/content-type/dynamic-zones.d.ts +0 -9
  695. package/dist/server/src/services/content-api/register-functions/content-type/dynamic-zones.d.ts.map +0 -1
  696. package/dist/server/src/services/content-api/register-functions/content-type/enums.d.ts +0 -9
  697. package/dist/server/src/services/content-api/register-functions/content-type/enums.d.ts.map +0 -1
  698. package/dist/server/src/services/content-api/register-functions/content-type/filters.d.ts +0 -9
  699. package/dist/server/src/services/content-api/register-functions/content-type/filters.d.ts.map +0 -1
  700. package/dist/server/src/services/content-api/register-functions/content-type/index.d.ts +0 -24
  701. package/dist/server/src/services/content-api/register-functions/content-type/index.d.ts.map +0 -1
  702. package/dist/server/src/services/content-api/register-functions/content-type/inputs.d.ts +0 -9
  703. package/dist/server/src/services/content-api/register-functions/content-type/inputs.d.ts.map +0 -1
  704. package/dist/server/src/services/internals/args/publication-state.d.ts.map +0 -1
  705. package/dist/server/src/services/internals/types/publication-state.d.ts +0 -10
  706. package/dist/server/src/services/internals/types/publication-state.d.ts.map +0 -1
  707. package/strapi-server.js +0 -3
@@ -1,2946 +1,12 @@
1
- import { isEmpty, toUpper, snakeCase, pick, mergeWith, isArray, propOr, get, getOr, first, isFunction, isNil, prop, startsWith, difference, propEq, isDate, isObject, has, mapValues, map, upperFirst, camelCase, pipe, lowerFirst, set, omit, identity, constant, isUndefined, isString, defaultTo, entries, reduce, merge as merge$1 } from "lodash/fp";
2
- import { ForbiddenError as ForbiddenError$2, UserInputError, ApolloError, ApolloServer } from "apollo-server-koa";
3
- import { ApolloServerPluginLandingPageDisabled, ApolloServerPluginLandingPageGraphQLPlayground } from "apollo-server-core";
4
- import depthLimit from "graphql-depth-limit";
5
- import { graphqlUploadKoa, GraphQLUpload } from "graphql-upload";
6
- import { errors, policy, parseType, validate, sanitize, toRegressedEnumValue, contentTypes, pipeAsync, pagination as pagination$1 } from "@strapi/utils";
7
- import { GraphQLError, GraphQLObjectType, GraphQLScalarType, Kind, valueFromASTUntyped } from "graphql";
8
- import { pruneSchema } from "@graphql-tools/utils";
9
- import * as nexus from "nexus";
10
- import { unionType, makeSchema, arg, list, inputObjectType, asNexusMethod, objectType, enumType, scalarType, nonNull, extendType } from "nexus";
11
- import { singular } from "pluralize";
12
- import { GraphQLDate, GraphQLJSON, GraphQLDateTime, GraphQLLong } from "graphql-scalars";
13
- const defaultConfig = {
14
- shadowCRUD: true,
15
- endpoint: "/graphql",
16
- subscriptions: false,
17
- maxLimit: -1,
18
- apolloServer: {}
19
- };
20
- const config = {
21
- default: defaultConfig
22
- };
23
- const { HttpError, ForbiddenError: ForbiddenError$1, UnauthorizedError, ApplicationError: ApplicationError$5, ValidationError: ValidationError$3 } = errors;
24
- const formatToCode = (name) => `STRAPI_${toUpper(snakeCase(name))}`;
25
- const formatErrorToExtension = (error2) => ({
26
- error: pick(["name", "message", "details"])(error2)
27
- });
28
- function formatGraphqlError(error2) {
29
- const { originalError } = error2;
30
- if (isEmpty(originalError)) {
31
- return error2;
32
- }
33
- if (originalError instanceof ForbiddenError$1 || originalError instanceof UnauthorizedError) {
34
- return new ForbiddenError$2(originalError.message, formatErrorToExtension(originalError));
35
- }
36
- if (originalError instanceof ValidationError$3) {
37
- return new UserInputError(originalError.message, formatErrorToExtension(originalError));
38
- }
39
- if (originalError instanceof ApplicationError$5 || originalError instanceof HttpError) {
40
- const name = formatToCode(originalError.name);
41
- return new ApolloError(originalError.message, name, formatErrorToExtension(originalError));
42
- }
43
- if (originalError instanceof ApolloError || originalError instanceof GraphQLError) {
44
- return error2;
45
- }
46
- strapi.log.error(originalError);
47
- return new ApolloError("Internal Server Error", "INTERNAL_SERVER_ERROR");
48
- }
49
- const merge = mergeWith((a, b) => {
50
- if (isArray(a) && isArray(b)) {
51
- return a.concat(b);
52
- }
53
- });
54
- const useUploadMiddleware = (strapi2, path) => {
55
- const uploadMiddleware = graphqlUploadKoa();
56
- strapi2.server.app.use((ctx, next) => {
57
- if (ctx.path === path) {
58
- return uploadMiddleware(ctx, next);
59
- }
60
- return next();
61
- });
62
- };
63
- async function bootstrap({ strapi: strapi2 }) {
64
- const schema = strapi2.plugin("graphql").service("content-api").buildSchema();
65
- if (isEmpty(schema)) {
66
- strapi2.log.warn("The GraphQL schema has not been generated because it is empty");
67
- return;
68
- }
69
- const { config: config2 } = strapi2.plugin("graphql");
70
- const path = config2("endpoint");
71
- const defaultServerConfig = {
72
- // Schema
73
- schema,
74
- // Initialize loaders for this request.
75
- context: ({ ctx }) => ({
76
- state: ctx.state,
77
- koaContext: ctx
78
- }),
79
- // Validation
80
- validationRules: [depthLimit(config2("depthLimit"))],
81
- // Errors
82
- formatError: formatGraphqlError,
83
- // Misc
84
- cors: false,
85
- uploads: false,
86
- bodyParserConfig: true,
87
- plugins: [
88
- process.env.NODE_ENV === "production" && !config2("playgroundAlways") ? ApolloServerPluginLandingPageDisabled() : ApolloServerPluginLandingPageGraphQLPlayground()
89
- ],
90
- cache: "bounded"
91
- };
92
- const serverConfig = merge(defaultServerConfig, config2("apolloServer"));
93
- const server = new ApolloServer(serverConfig);
94
- useUploadMiddleware(strapi2, path);
95
- try {
96
- await server.start();
97
- } catch (error2) {
98
- if (error2 instanceof Error) {
99
- strapi2.log.error("Failed to start the Apollo server", error2.message);
100
- }
101
- throw error2;
102
- }
103
- strapi2.server.routes([
104
- {
105
- method: "ALL",
106
- path,
107
- handler: [
108
- (ctx, next) => {
109
- ctx.state.route = {
110
- info: {
111
- // Indicate it's a content API route
112
- type: "content-api"
113
- }
114
- };
115
- return strapi2.auth.authenticate(ctx, next);
116
- },
117
- // Apollo Server
118
- server.getMiddleware({
119
- path,
120
- cors: serverConfig.cors,
121
- bodyParserConfig: serverConfig.bodyParserConfig
122
- })
123
- ],
124
- config: {
125
- auth: false
126
- }
127
- }
128
- ]);
129
- strapi2.plugin("graphql").destroy = async () => {
130
- await server.stop();
131
- };
132
- }
133
- const { PolicyError } = errors;
134
- const getPoliciesConfig = propOr([], "policies");
135
- const createPoliciesMiddleware = (resolverConfig, { strapi: strapi2 }) => {
136
- const resolverPolicies = getPoliciesConfig(resolverConfig);
137
- const policies = policy.resolve(resolverPolicies, {});
138
- return async (resolve, parent, args2, context, info) => {
139
- const policyContext = createGraphQLPolicyContext(parent, args2, context, info);
140
- for (const { handler, config: config2 } of policies) {
141
- const result = await handler(policyContext, config2, { strapi: strapi2 });
142
- if (![true, void 0].includes(result)) {
143
- throw new PolicyError();
144
- }
145
- }
146
- return resolve(parent, args2, context, info);
147
- };
148
- };
149
- const createGraphQLPolicyContext = (parent, args2, context, info) => {
150
- const policyContext = {
151
- get parent() {
152
- return parent;
153
- },
154
- get args() {
155
- return args2;
156
- },
157
- get context() {
158
- return context;
159
- },
160
- get info() {
161
- return info;
162
- },
163
- get state() {
164
- return this.context.state;
165
- },
166
- get http() {
167
- return this.context.koaContext;
168
- }
169
- };
170
- return policy.createPolicyContext("graphql", policyContext);
171
- };
172
- const { ForbiddenError } = errors;
173
- const introspectionQueries = [
174
- "__Schema",
175
- "__Type",
176
- "__Field",
177
- "__InputValue",
178
- "__EnumValue",
179
- "__Directive"
180
- ];
181
- const parseMiddlewares = (resolverConfig, strapi2) => {
182
- const resolverMiddlewares = getOr([], "middlewares", resolverConfig);
183
- return resolverMiddlewares.map(
184
- (middleware) => {
185
- if (isFunction(middleware)) {
186
- return middleware;
187
- }
188
- if (typeof middleware === "string") {
189
- return strapi2.middleware(middleware);
190
- }
191
- if (typeof middleware === "object") {
192
- const { name, options = {} } = middleware;
193
- return strapi2.middleware(name)(options, { strapi: strapi2 });
194
- }
195
- throw new Error(
196
- `Invalid middleware type, expected (function,string,object), received ${typeof middleware}`
197
- );
198
- }
199
- );
200
- };
201
- const wrapResolvers = ({
202
- schema,
203
- strapi: strapi2,
204
- extension = {}
205
- }) => {
206
- const { resolversConfig = {} } = extension;
207
- const isValidFieldName = (field) => !field.startsWith("__");
208
- const typeMap = schema.getTypeMap();
209
- Object.entries(typeMap).forEach(([type, definition]) => {
210
- const isGraphQLObjectType = definition instanceof GraphQLObjectType;
211
- const isIgnoredType = introspectionQueries.includes(type);
212
- if (!isGraphQLObjectType || isIgnoredType) {
213
- return;
214
- }
215
- const fields = definition.getFields();
216
- const fieldsToProcess = Object.entries(fields).filter(([field]) => isValidFieldName(field));
217
- for (const [fieldName, fieldDefinition] of fieldsToProcess) {
218
- const defaultResolver = get(fieldName);
219
- const path = `${type}.${fieldName}`;
220
- const resolverConfig = getOr({}, path, resolversConfig);
221
- const { resolve: baseResolver = defaultResolver } = fieldDefinition;
222
- const middlewares = parseMiddlewares(resolverConfig, strapi2);
223
- const policyMiddleware = createPoliciesMiddleware(resolverConfig, { strapi: strapi2 });
224
- middlewares.push(policyMiddleware);
225
- const boundMiddlewares = middlewares.map((middleware, index2, collection) => {
226
- return (parents, args2, context, info) => middleware(
227
- // Make sure the last middleware in the list calls the baseResolver
228
- index2 >= collection.length - 1 ? baseResolver : boundMiddlewares[index2 + 1],
229
- parents,
230
- args2,
231
- context,
232
- info
233
- );
234
- });
235
- const authorize = async ({ context }) => {
236
- const authConfig = get("auth", resolverConfig);
237
- const authContext = get("state.auth", context);
238
- const isValidType = ["Mutation", "Query", "Subscription"].includes(type);
239
- const hasConfig = !isNil(authConfig);
240
- const isAuthDisabled = authConfig === false;
241
- if ((isValidType || hasConfig) && !isAuthDisabled) {
242
- try {
243
- await strapi2.auth.verify(authContext, authConfig);
244
- } catch (error2) {
245
- throw new ForbiddenError();
246
- }
247
- }
248
- };
249
- fieldDefinition.resolve = async (parent, args2, context, info) => {
250
- await authorize({ context });
251
- return first(boundMiddlewares)(parent, args2, context, info);
252
- };
253
- }
254
- });
255
- return schema;
256
- };
257
- const registerCollectionType = (contentType2, {
258
- registry,
259
- strapi: strapi2,
260
- builders: builders2
261
- }) => {
262
- const { service: getService } = strapi2.plugin("graphql");
263
- const { naming: naming2 } = getService("utils");
264
- const { KINDS: KINDS2 } = getService("constants");
265
- const extension = getService("extension");
266
- const types2 = {
267
- base: naming2.getTypeName(contentType2),
268
- entity: naming2.getEntityName(contentType2),
269
- response: naming2.getEntityResponseName(contentType2),
270
- responseCollection: naming2.getEntityResponseCollectionName(contentType2),
271
- relationResponseCollection: naming2.getRelationResponseCollectionName(contentType2),
272
- queries: naming2.getEntityQueriesTypeName(contentType2),
273
- mutations: naming2.getEntityMutationsTypeName(contentType2)
274
- };
275
- const getConfig = (kind) => ({ kind, contentType: contentType2 });
276
- registry.register(types2.base, builders2.buildTypeDefinition(contentType2), getConfig(KINDS2.type));
277
- registry.register(
278
- types2.entity,
279
- builders2.buildEntityDefinition(contentType2),
280
- getConfig(KINDS2.entity)
281
- );
282
- registry.register(
283
- types2.response,
284
- builders2.buildResponseDefinition(contentType2),
285
- getConfig(KINDS2.entityResponse)
286
- );
287
- registry.register(
288
- types2.responseCollection,
289
- builders2.buildResponseCollectionDefinition(contentType2),
290
- getConfig(KINDS2.entityResponseCollection)
291
- );
292
- registry.register(
293
- types2.relationResponseCollection,
294
- builders2.buildRelationResponseCollectionDefinition(contentType2),
295
- getConfig(KINDS2.relationResponseCollection)
296
- );
297
- if (extension.shadowCRUD(contentType2.uid).areQueriesEnabled()) {
298
- registry.register(
299
- types2.queries,
300
- builders2.buildCollectionTypeQueries(contentType2),
301
- getConfig(KINDS2.query)
302
- );
303
- }
304
- if (extension.shadowCRUD(contentType2.uid).areMutationsEnabled()) {
305
- registry.register(
306
- types2.mutations,
307
- builders2.buildCollectionTypeMutations(contentType2),
308
- getConfig(KINDS2.mutation)
309
- );
310
- }
311
- };
312
- const registerSingleType = (contentType2, {
313
- registry,
314
- strapi: strapi2,
315
- builders: builders2
316
- }) => {
317
- const { service: getService } = strapi2.plugin("graphql");
318
- const { naming: naming2 } = getService("utils");
319
- const { KINDS: KINDS2 } = getService("constants");
320
- const extension = getService("extension");
321
- const types2 = {
322
- base: naming2.getTypeName(contentType2),
323
- entity: naming2.getEntityName(contentType2),
324
- response: naming2.getEntityResponseName(contentType2),
325
- responseCollection: naming2.getEntityResponseCollectionName(contentType2),
326
- relationResponseCollection: naming2.getRelationResponseCollectionName(contentType2),
327
- queries: naming2.getEntityQueriesTypeName(contentType2),
328
- mutations: naming2.getEntityMutationsTypeName(contentType2)
329
- };
330
- const getConfig = (kind) => ({ kind, contentType: contentType2 });
331
- registry.register(types2.base, builders2.buildTypeDefinition(contentType2), getConfig(KINDS2.type));
332
- registry.register(
333
- types2.entity,
334
- builders2.buildEntityDefinition(contentType2),
335
- getConfig(KINDS2.entity)
336
- );
337
- registry.register(
338
- types2.response,
339
- builders2.buildResponseDefinition(contentType2),
340
- getConfig(KINDS2.entityResponse)
341
- );
342
- registry.register(
343
- types2.responseCollection,
344
- builders2.buildResponseCollectionDefinition(contentType2),
345
- getConfig(KINDS2.entityResponseCollection)
346
- );
347
- registry.register(
348
- types2.relationResponseCollection,
349
- builders2.buildRelationResponseCollectionDefinition(contentType2),
350
- getConfig(KINDS2.relationResponseCollection)
351
- );
352
- if (extension.shadowCRUD(contentType2.uid).areQueriesEnabled()) {
353
- registry.register(
354
- types2.queries,
355
- builders2.buildSingleTypeQueries(contentType2),
356
- getConfig(KINDS2.query)
357
- );
358
- }
359
- if (extension.shadowCRUD(contentType2.uid).areMutationsEnabled()) {
360
- registry.register(
361
- types2.mutations,
362
- builders2.buildSingleTypeMutations(contentType2),
363
- getConfig(KINDS2.mutation)
364
- );
365
- }
366
- };
367
- const registerComponent = (contentType2, {
368
- registry,
369
- strapi: strapi2,
370
- builders: builders2
371
- }) => {
372
- const { service: getService } = strapi2.plugin("graphql");
373
- const { getComponentName } = getService("utils").naming;
374
- const { KINDS: KINDS2 } = getService("constants");
375
- const name = getComponentName(contentType2);
376
- const definition = builders2.buildTypeDefinition(contentType2);
377
- registry.register(name, definition, { kind: KINDS2.component, contentType: contentType2 });
378
- };
379
- const registerPolymorphicContentType = (contentType2, { registry, strapi: strapi2 }) => {
380
- const { service: getService } = strapi2.plugin("graphql");
381
- const {
382
- naming: naming2,
383
- attributes: { isMorphRelation }
384
- } = getService("utils");
385
- const { KINDS: KINDS2 } = getService("constants");
386
- const { attributes: attributes2 = {} } = contentType2;
387
- const morphAttributes = Object.entries(attributes2).filter(
388
- ([, attribute]) => isMorphRelation(attribute)
389
- );
390
- for (const [attributeName, attribute] of morphAttributes) {
391
- const name = naming2.getMorphRelationTypeName(contentType2, attributeName);
392
- const { target } = attribute;
393
- if (!Array.isArray(target)) {
394
- continue;
395
- }
396
- const members = target.map((uid) => strapi2.getModel(uid)).map((contentType22) => naming2.getTypeName(contentType22));
397
- registry.register(
398
- name,
399
- unionType({
400
- name,
401
- resolveType(obj) {
402
- const contentType22 = strapi2.getModel(obj.__type);
403
- if (!contentType22) {
404
- return null;
405
- }
406
- if (contentType22.modelType === "component") {
407
- return naming2.getComponentName(contentType22);
408
- }
409
- return naming2.getTypeName(contentType22);
410
- },
411
- definition(t) {
412
- t.members(...members);
413
- }
414
- }),
415
- { kind: KINDS2.morph, contentType: contentType2, attributeName }
416
- );
417
- }
418
- };
419
- const registerScalars = ({ registry, strapi: strapi2 }) => {
420
- const { service: getService } = strapi2.plugin("graphql");
421
- const { scalars: scalars2 } = getService("internals");
422
- const { KINDS: KINDS2 } = getService("constants");
423
- Object.entries(scalars2).forEach(([name, definition]) => {
424
- registry.register(name, definition, { kind: KINDS2.scalar });
425
- });
426
- };
427
- const registerInternals = ({ registry, strapi: strapi2 }) => {
428
- const { buildInternalTypes } = strapi2.plugin("graphql").service("internals");
429
- const internalTypes = buildInternalTypes({ strapi: strapi2 });
430
- for (const [kind, definitions] of Object.entries(internalTypes)) {
431
- registry.registerMany(Object.entries(definitions), { kind });
432
- }
433
- };
434
- const registerDynamicZonesDefinition$1 = (contentType2, {
435
- registry,
436
- strapi: strapi2,
437
- builders: builders2
438
- }) => {
439
- const { service: getService } = strapi2.plugin("graphql");
440
- const {
441
- naming: naming2,
442
- attributes: { isDynamicZone }
443
- } = getService("utils");
444
- const { KINDS: KINDS2 } = getService("constants");
445
- const { attributes: attributes2 } = contentType2;
446
- const dynamicZoneAttributes = Object.keys(attributes2).filter(
447
- (attributeName) => isDynamicZone(attributes2[attributeName])
448
- );
449
- for (const attributeName of dynamicZoneAttributes) {
450
- const attribute = attributes2[attributeName];
451
- const dzName = naming2.getDynamicZoneName(contentType2, attributeName);
452
- const dzInputName = naming2.getDynamicZoneInputName(contentType2, attributeName);
453
- const [type, input] = builders2.buildDynamicZoneDefinition(attribute, dzName, dzInputName);
454
- const baseConfig = {
455
- contentType: contentType2,
456
- attributeName,
457
- attribute
458
- };
459
- registry.register(dzName, type, { kind: KINDS2.dynamicZone, ...baseConfig });
460
- registry.register(dzInputName, input, { kind: KINDS2.input, ...baseConfig });
461
- }
462
- };
463
- const registerEnumsDefinition$1 = (contentType2, {
464
- registry,
465
- strapi: strapi2,
466
- builders: builders2
467
- }) => {
468
- const { service: getService } = strapi2.plugin("graphql");
469
- const {
470
- naming: naming2,
471
- attributes: { isEnumeration }
472
- } = getService("utils");
473
- const { KINDS: KINDS2 } = getService("constants");
474
- const { attributes: attributes2 } = contentType2;
475
- const enumAttributes = Object.keys(attributes2).filter(
476
- (attributeName) => isEnumeration(attributes2[attributeName])
477
- );
478
- for (const attributeName of enumAttributes) {
479
- const attribute = attributes2[attributeName];
480
- const enumName = naming2.getEnumName(contentType2, attributeName);
481
- const enumDefinition = builders2.buildEnumTypeDefinition(attribute, enumName);
482
- registry.register(enumName, enumDefinition, {
483
- kind: KINDS2.enum,
484
- contentType: contentType2,
485
- attributeName,
486
- attribute
487
- });
488
- }
489
- };
490
- const registerInputsDefinition$1 = (contentType2, {
491
- registry,
492
- strapi: strapi2,
493
- builders: builders2
494
- }) => {
495
- const { service: getService } = strapi2.plugin("graphql");
496
- const { getComponentInputName, getContentTypeInputName } = getService("utils").naming;
497
- const { KINDS: KINDS2 } = getService("constants");
498
- const { modelType } = contentType2;
499
- const type = (modelType === "component" ? getComponentInputName : getContentTypeInputName).call(
500
- null,
501
- contentType2
502
- );
503
- const definition = builders2.buildInputType(contentType2);
504
- registry.register(type, definition, { kind: KINDS2.input, contentType: contentType2 });
505
- };
506
- const registerFiltersDefinition$1 = (contentType2, {
507
- registry,
508
- strapi: strapi2,
509
- builders: builders2
510
- }) => {
511
- const { service: getService } = strapi2.plugin("graphql");
512
- const { getFiltersInputTypeName } = getService("utils").naming;
513
- const { KINDS: KINDS2 } = getService("constants");
514
- const type = getFiltersInputTypeName(contentType2);
515
- const definition = builders2.buildContentTypeFilters(contentType2);
516
- registry.register(type, definition, { kind: KINDS2.filtersInput, contentType: contentType2 });
517
- };
518
- const contentType$1 = {
519
- registerDynamicZonesDefinition: registerDynamicZonesDefinition$1,
520
- registerFiltersDefinition: registerFiltersDefinition$1,
521
- registerInputsDefinition: registerInputsDefinition$1,
522
- registerEnumsDefinition: registerEnumsDefinition$1
523
- };
524
- const {
525
- registerEnumsDefinition,
526
- registerInputsDefinition,
527
- registerFiltersDefinition,
528
- registerDynamicZonesDefinition
529
- } = contentType$1;
530
- const contentAPI = ({ strapi: strapi2 }) => {
531
- const { mergeSchemas, addResolversToSchema } = require("@graphql-tools/schema");
532
- const { service: getGraphQLService } = strapi2.plugin("graphql");
533
- const { config: config2 } = strapi2.plugin("graphql");
534
- const { KINDS: KINDS2, GENERIC_MORPH_TYPENAME: GENERIC_MORPH_TYPENAME2 } = getGraphQLService("constants");
535
- const extensionService = getGraphQLService("extension");
536
- let registry;
537
- let builders2;
538
- const buildSchema = () => {
539
- const isShadowCRUDEnabled = !!config2("shadowCRUD");
540
- registry = getGraphQLService("type-registry").new();
541
- builders2 = getGraphQLService("builders").new("content-api", registry);
542
- registerScalars({ registry, strapi: strapi2 });
543
- registerInternals({ registry, strapi: strapi2 });
544
- if (isShadowCRUDEnabled) {
545
- shadowCRUD();
546
- }
547
- const schema = buildMergedSchema({ registry });
548
- const extension = extensionService.generate({ typeRegistry: registry });
549
- const schemaWithResolvers = addResolversToSchema(schema, extension.resolvers);
550
- const outputs = {
551
- schema: config2("artifacts.schema", false),
552
- typegen: config2("artifacts.typegen", false)
553
- };
554
- const currentEnv = strapi2.config.get("environment");
555
- const nexusSchema = makeSchema({
556
- types: [],
557
- // Build the schema from the merged GraphQL schema.
558
- // Since we're passing the schema to the mergeSchema property, it'll transform our SDL type definitions
559
- // into Nexus type definition, thus allowing them to be handled by Nexus plugins & other processing
560
- mergeSchema: { schema: schemaWithResolvers },
561
- // Apply user-defined plugins
562
- plugins: extension.plugins,
563
- // Whether to generate artifacts (GraphQL schema, TS types definitions) or not.
564
- // By default, we generate artifacts only on development environment
565
- shouldGenerateArtifacts: config2("generateArtifacts", currentEnv === "development"),
566
- // Artifacts generation configuration
567
- outputs
568
- });
569
- const wrappedNexusSchema = wrapResolvers({ schema: nexusSchema, strapi: strapi2, extension });
570
- const prunedNexusSchema = pruneSchema(wrappedNexusSchema);
571
- return prunedNexusSchema;
572
- };
573
- const buildMergedSchema = ({ registry: registry2 }) => {
574
- const { types: types2, typeDefs = [] } = extensionService.generate({ typeRegistry: registry2 });
575
- const nexusSchema = makeSchema({ types: [registry2.definitions, types2] });
576
- return mergeSchemas({
577
- typeDefs,
578
- // Give access to the shadowCRUD & nexus based types
579
- // Note: This is necessary so that types defined in SDL can reference types defined with Nexus
580
- schemas: [nexusSchema]
581
- });
582
- };
583
- const shadowCRUD = () => {
584
- const extensionService2 = getGraphQLService("extension");
585
- const contentTypes2 = [
586
- ...Object.values(strapi2.components),
587
- ...Object.values(strapi2.contentTypes)
588
- ];
589
- contentTypes2.map(prop("uid")).filter(startsWith("admin::")).forEach((uid) => extensionService2.shadowCRUD(uid).disable());
590
- const contentTypesWithShadowCRUD = contentTypes2.filter(
591
- (ct) => extensionService2.shadowCRUD(ct.uid).isEnabled()
592
- );
593
- registerAPITypes(contentTypesWithShadowCRUD);
594
- registerMorphTypes(contentTypesWithShadowCRUD);
595
- };
596
- const registerAPITypes = (contentTypes2) => {
597
- for (const contentType2 of contentTypes2) {
598
- const { modelType } = contentType2;
599
- const registerOptions = { registry, strapi: strapi2, builders: builders2 };
600
- registerEnumsDefinition(contentType2, registerOptions);
601
- registerDynamicZonesDefinition(contentType2, registerOptions);
602
- registerFiltersDefinition(contentType2, registerOptions);
603
- registerInputsDefinition(contentType2, registerOptions);
604
- if (modelType === "component") {
605
- registerComponent(contentType2, registerOptions);
606
- continue;
607
- }
608
- const { kind } = contentType2;
609
- if (kind === "singleType") {
610
- registerSingleType(contentType2, registerOptions);
611
- } else if (kind === "collectionType") {
612
- registerCollectionType(contentType2, registerOptions);
613
- }
614
- }
615
- };
616
- const registerMorphTypes = (contentTypes2) => {
617
- const genericMorphType = builders2.buildGenericMorphDefinition();
618
- registry.register(GENERIC_MORPH_TYPENAME2, genericMorphType, { kind: KINDS2.morph });
619
- for (const contentType2 of contentTypes2) {
620
- registerPolymorphicContentType(contentType2, { registry, strapi: strapi2 });
621
- }
622
- };
623
- return { buildSchema };
624
- };
625
- const { ApplicationError: ApplicationError$4 } = errors;
626
- const createTypeRegistry = () => {
627
- const registry = /* @__PURE__ */ new Map();
628
- const typeRegistry2 = {
629
- /**
630
- * Register a new type definition
631
- */
632
- register(name, definition, config2 = {}) {
633
- if (registry.has(name)) {
634
- throw new ApplicationError$4(`"${name}" has already been registered`);
635
- }
636
- registry.set(name, { name, definition, config: config2 });
637
- return this;
638
- },
639
- /**
640
- * Register many types definitions at once
641
- * @param {[string, NexusAcceptedTypeDef][]} definitionsEntries
642
- * @param {object | function} [config]
643
- */
644
- registerMany(definitionsEntries, config2 = {}) {
645
- for (const [name, definition] of definitionsEntries) {
646
- this.register(name, definition, isFunction(config2) ? config2(name, definition) : config2);
647
- }
648
- return this;
649
- },
650
- /**
651
- * Check if the given type name has already been added to the registry
652
- * @param {string} name
653
- * @return {boolean}
654
- */
655
- has(name) {
656
- return registry.has(name);
657
- },
658
- /**
659
- * Get the type definition for `name`
660
- * @param {string} name - The name of the type
661
- */
662
- get(name) {
663
- return registry.get(name);
664
- },
665
- /**
666
- * Transform and return the registry as an object
667
- * @return {Object<string, RegisteredTypeDef>}
668
- */
669
- toObject() {
670
- return Object.fromEntries(registry.entries());
671
- },
672
- /**
673
- * Return the name of every registered type
674
- * @return {string[]}
675
- */
676
- get types() {
677
- return Array.from(registry.keys());
678
- },
679
- /**
680
- * Return all the registered definitions as an array
681
- * @return {RegisteredTypeDef[]}
682
- */
683
- get definitions() {
684
- return Array.from(registry.values());
685
- },
686
- /**
687
- * Filter and return the types definitions that matches the given predicate
688
- * @param {function(RegisteredTypeDef): boolean} predicate
689
- * @return {RegisteredTypeDef[]}
690
- */
691
- where(predicate) {
692
- return this.definitions.filter(predicate);
693
- }
694
- };
695
- return typeRegistry2;
696
- };
697
- const typeRegistry = () => ({
698
- new: createTypeRegistry
699
- });
700
- const { ApplicationError: ApplicationError$3 } = errors;
701
- const strapiScalarToGraphQLScalar = ({ strapi: strapi2 }) => {
702
- const { STRAPI_SCALARS: STRAPI_SCALARS2, SCALARS_ASSOCIATIONS: SCALARS_ASSOCIATIONS2 } = strapi2.plugin("graphql").service("constants");
703
- const missingStrapiScalars = difference(STRAPI_SCALARS2, Object.keys(SCALARS_ASSOCIATIONS2));
704
- if (missingStrapiScalars.length > 0) {
705
- throw new ApplicationError$3("Some Strapi scalars are not handled in the GraphQL scalars mapper");
706
- }
707
- return {
708
- /**
709
- * Used to transform a Strapi scalar type into its GraphQL equivalent
710
- */
711
- strapiScalarToGraphQLScalar(strapiScalar) {
712
- return get(strapiScalar, SCALARS_ASSOCIATIONS2);
713
- }
714
- };
715
- };
716
- const virtualScalarAttributes = ["id"];
717
- const graphQLFiltersToStrapiQuery = ({ strapi: strapi2 }) => {
718
- const { service: getService } = strapi2.plugin("graphql");
719
- const recursivelyReplaceScalarOperators = (data) => {
720
- const { operators: operators2 } = getService("builders").filters;
721
- if (Array.isArray(data)) {
722
- return data.map(recursivelyReplaceScalarOperators);
723
- }
724
- if (isDate(data) || !isObject(data)) {
725
- return data;
726
- }
727
- const result = {};
728
- for (const [key, value] of Object.entries(data)) {
729
- const isOperator = !!operators2[key];
730
- const newKey = isOperator ? operators2[key].strapiOperator : key;
731
- result[newKey] = recursivelyReplaceScalarOperators(value);
732
- }
733
- return result;
734
- };
735
- return {
736
- /**
737
- * Transform one or many GraphQL filters object into a valid Strapi query
738
- * @param {object | object[]} filters
739
- * @param {object} contentType
740
- * @return {object | object[]}
741
- */
742
- graphQLFiltersToStrapiQuery(filters2, contentType2) {
743
- const { isStrapiScalar, isMedia, isRelation, isComponent } = getService("utils").attributes;
744
- const { operators: operators2 } = getService("builders").filters;
745
- const ROOT_LEVEL_OPERATORS = [operators2.and, operators2.or, operators2.not];
746
- if (isNil(filters2)) {
747
- return {};
748
- }
749
- if (Array.isArray(filters2)) {
750
- return filters2.map(
751
- (filtersItem) => this.graphQLFiltersToStrapiQuery(filtersItem, contentType2)
752
- );
753
- }
754
- const resultMap = {};
755
- const { attributes: attributes2 } = contentType2;
756
- const isAttribute = (attributeName) => {
757
- return virtualScalarAttributes.includes(attributeName) || has(attributeName, attributes2);
758
- };
759
- for (const [key, value] of Object.entries(filters2)) {
760
- if (isAttribute(key)) {
761
- const attribute = attributes2[key];
762
- if (virtualScalarAttributes.includes(key) || isStrapiScalar(attribute)) {
763
- resultMap[key] = recursivelyReplaceScalarOperators(value);
764
- } else if (isRelation(attribute) || isMedia(attribute)) {
765
- const relModel = strapi2.getModel(attribute.target);
766
- resultMap[key] = this.graphQLFiltersToStrapiQuery(value, relModel);
767
- } else if (isComponent(attribute)) {
768
- const componentModel = strapi2.getModel(attribute.component);
769
- resultMap[key] = this.graphQLFiltersToStrapiQuery(value, componentModel);
770
- }
771
- } else {
772
- const rootLevelOperator = ROOT_LEVEL_OPERATORS.find(propEq("fieldName", key));
773
- if (rootLevelOperator) {
774
- const { strapiOperator } = rootLevelOperator;
775
- resultMap[strapiOperator] = this.graphQLFiltersToStrapiQuery(value, contentType2);
776
- }
777
- }
778
- }
779
- return resultMap;
780
- }
781
- };
782
- };
783
- const graphqlScalarToOperators = ({ strapi: strapi2 }) => ({
784
- graphqlScalarToOperators(graphqlScalar) {
785
- const { GRAPHQL_SCALAR_OPERATORS: GRAPHQL_SCALAR_OPERATORS2 } = strapi2.plugin("graphql").service("constants");
786
- const { operators: operators2 } = strapi2.plugin("graphql").service("builders").filters;
787
- const associations = mapValues(
788
- map((operatorName) => operators2[operatorName]),
789
- GRAPHQL_SCALAR_OPERATORS2
790
- );
791
- return get(graphqlScalar, associations);
792
- }
793
- });
794
- const entityToResponseEntity = (entity2) => ({
795
- id: entity2.id,
796
- attributes: entity2
797
- });
798
- const entitiesToResponseEntities = map(entityToResponseEntity);
799
- const entityToResponseEntity$1 = () => ({
800
- entityToResponseEntity,
801
- entitiesToResponseEntities
802
- });
803
- const mappers = (context) => ({
804
- ...strapiScalarToGraphQLScalar(context),
805
- ...graphQLFiltersToStrapiQuery(context),
806
- ...graphqlScalarToOperators(context),
807
- ...entityToResponseEntity$1()
808
- });
809
- const attributes = ({ strapi: strapi2 }) => {
810
- const isStrapiScalar = (attribute) => {
811
- return strapi2.plugin("graphql").service("constants").STRAPI_SCALARS.includes(attribute.type);
812
- };
813
- const isGraphQLScalar = (attribute) => {
814
- return strapi2.plugin("graphql").service("constants").GRAPHQL_SCALARS.includes(attribute.type);
815
- };
816
- const isMorphRelation = (attribute) => {
817
- return attribute.type === "relation" && attribute.relation.includes("morph");
818
- };
819
- const isMedia = propEq("type", "media");
820
- const isRelation = propEq("type", "relation");
821
- const isEnumeration = propEq("type", "enumeration");
822
- const isComponent = propEq("type", "component");
823
- const isDynamicZone = propEq("type", "dynamiczone");
824
- return {
825
- isStrapiScalar,
826
- isGraphQLScalar,
827
- isMorphRelation,
828
- isMedia,
829
- isRelation,
830
- isEnumeration,
831
- isComponent,
832
- isDynamicZone
833
- };
834
- };
835
- const { ApplicationError: ApplicationError$2 } = errors;
836
- const naming = ({ strapi: strapi2 }) => {
837
- const getEnumName = (contentType2, attributeName) => {
838
- const { attributes: attributes2 } = contentType2;
839
- const { enumName } = attributes2[attributeName];
840
- const { modelType } = contentType2;
841
- const typeName = modelType === "component" ? getComponentName(contentType2) : getTypeName(contentType2);
842
- const defaultEnumName = `ENUM_${typeName.toUpperCase()}_${attributeName.toUpperCase()}`;
843
- return enumName || defaultEnumName;
844
- };
845
- const getTypeName = (contentType2, {
846
- plurality = "singular"
847
- } = {}) => {
848
- const plugin = get("plugin", contentType2);
849
- const modelName = get("modelName", contentType2);
850
- const name = plurality === "singular" ? get("info.singularName", contentType2) : get("info.pluralName", contentType2);
851
- const transformedPlugin = upperFirst(camelCase(plugin));
852
- const transformedModelName = upperFirst(camelCase(name || singular(modelName)));
853
- return `${transformedPlugin}${transformedModelName}`;
854
- };
855
- const getEntityName = (contentType2) => {
856
- return `${getTypeName(contentType2)}Entity`;
857
- };
858
- const getEntityMetaName = (contentType2) => {
859
- return `${getEntityName(contentType2)}Meta`;
860
- };
861
- const getEntityResponseName = (contentType2) => {
862
- return `${getEntityName(contentType2)}Response`;
863
- };
864
- const getEntityResponseCollectionName = (contentType2) => {
865
- return `${getEntityName(contentType2)}ResponseCollection`;
866
- };
867
- const getRelationResponseCollectionName = (contentType2) => {
868
- return `${getTypeName(contentType2)}RelationResponseCollection`;
869
- };
870
- const getComponentName = (contentType2) => {
871
- return contentType2.globalId;
872
- };
873
- const getComponentNameFromAttribute = (attribute) => {
874
- return strapi2.components[attribute.component].globalId;
875
- };
876
- const getDynamicZoneName = (contentType2, attributeName) => {
877
- const typeName = getTypeName(contentType2);
878
- const dzName = upperFirst(camelCase(attributeName));
879
- const suffix = "DynamicZone";
880
- return `${typeName}${dzName}${suffix}`;
881
- };
882
- const getDynamicZoneInputName = (contentType2, attributeName) => {
883
- const dzName = getDynamicZoneName(contentType2, attributeName);
884
- return `${dzName}Input`;
885
- };
886
- const getComponentInputName = (contentType2) => {
887
- const componentName = getComponentName(contentType2);
888
- return `${componentName}Input`;
889
- };
890
- const getContentTypeInputName = (contentType2) => {
891
- const typeName = getTypeName(contentType2);
892
- return `${typeName}Input`;
893
- };
894
- const getEntityQueriesTypeName = (contentType2) => {
895
- return `${getEntityName(contentType2)}Queries`;
896
- };
897
- const getEntityMutationsTypeName = (contentType2) => {
898
- return `${getEntityName(contentType2)}Mutations`;
899
- };
900
- const getFiltersInputTypeName = (contentType2) => {
901
- const isComponent = contentType2.modelType === "component";
902
- const baseName = isComponent ? getComponentName(contentType2) : getTypeName(contentType2);
903
- return `${baseName}FiltersInput`;
904
- };
905
- const getScalarFilterInputTypeName = (scalarType2) => {
906
- return `${scalarType2}FilterInput`;
907
- };
908
- const getMorphRelationTypeName = (contentType2, attributeName) => {
909
- const typeName = getTypeName(contentType2);
910
- const formattedAttr = upperFirst(camelCase(attributeName));
911
- return `${typeName}${formattedAttr}Morph`;
912
- };
913
- const buildCustomTypeNameGenerator = (options) => {
914
- const { prefix = "", suffix = "", plurality = "singular", firstLetterCase = "upper" } = options;
915
- if (!["plural", "singular"].includes(plurality)) {
916
- throw new ApplicationError$2(
917
- `"plurality" param must be either "plural" or "singular", but got: "${plurality}"`
918
- );
919
- }
920
- const getCustomTypeName = pipe(
921
- (ct) => getTypeName(ct, { plurality }),
922
- firstLetterCase === "upper" ? upperFirst : lowerFirst
923
- );
924
- return (contentType2) => `${prefix}${getCustomTypeName(contentType2)}${suffix}`;
925
- };
926
- const getFindQueryName = buildCustomTypeNameGenerator({
927
- plurality: "plural",
928
- firstLetterCase: "lower"
929
- });
930
- const getFindOneQueryName = buildCustomTypeNameGenerator({ firstLetterCase: "lower" });
931
- const getCreateMutationTypeName = buildCustomTypeNameGenerator({
932
- prefix: "create",
933
- firstLetterCase: "upper"
934
- });
935
- const getUpdateMutationTypeName = buildCustomTypeNameGenerator({
936
- prefix: "update",
937
- firstLetterCase: "upper"
938
- });
939
- const getDeleteMutationTypeName = buildCustomTypeNameGenerator({
940
- prefix: "delete",
941
- firstLetterCase: "upper"
942
- });
943
- return {
944
- getEnumName,
945
- getTypeName,
946
- getEntityName,
947
- getEntityMetaName,
948
- getEntityResponseName,
949
- getEntityResponseCollectionName,
950
- getRelationResponseCollectionName,
951
- getComponentName,
952
- getComponentNameFromAttribute,
953
- getDynamicZoneName,
954
- getDynamicZoneInputName,
955
- getComponentInputName,
956
- getContentTypeInputName,
957
- getEntityQueriesTypeName,
958
- getEntityMutationsTypeName,
959
- getFiltersInputTypeName,
960
- getScalarFilterInputTypeName,
961
- getMorphRelationTypeName,
962
- buildCustomTypeNameGenerator,
963
- getFindQueryName,
964
- getFindOneQueryName,
965
- getCreateMutationTypeName,
966
- getUpdateMutationTypeName,
967
- getDeleteMutationTypeName
968
- };
969
- };
970
- const utils$1 = (context) => ({
971
- naming: naming(context),
972
- attributes: attributes(context),
973
- mappers: mappers(context)
974
- });
975
- const PAGINATION_TYPE_NAME = "Pagination";
976
- const PUBLICATION_STATE_TYPE_NAME = "PublicationState";
977
- const ERROR_TYPE_NAME = "Error";
978
- const RESPONSE_COLLECTION_META_TYPE_NAME = "ResponseCollectionMeta";
979
- const GRAPHQL_SCALARS = [
980
- "ID",
981
- "Boolean",
982
- "Int",
983
- "String",
984
- "Long",
985
- "Float",
986
- "JSON",
987
- "Date",
988
- "Time",
989
- "DateTime"
990
- ];
991
- const STRAPI_SCALARS = [
992
- "boolean",
993
- "integer",
994
- "string",
995
- "richtext",
996
- "blocks",
997
- "enumeration",
998
- "biginteger",
999
- "float",
1000
- "decimal",
1001
- "json",
1002
- "date",
1003
- "time",
1004
- "datetime",
1005
- "timestamp",
1006
- "uid",
1007
- "email",
1008
- "password",
1009
- "text"
1010
- ];
1011
- const SCALARS_ASSOCIATIONS = {
1012
- uid: "String",
1013
- email: "String",
1014
- password: "String",
1015
- text: "String",
1016
- boolean: "Boolean",
1017
- integer: "Int",
1018
- string: "String",
1019
- enumeration: "String",
1020
- richtext: "String",
1021
- blocks: "JSON",
1022
- biginteger: "Long",
1023
- float: "Float",
1024
- decimal: "Float",
1025
- json: "JSON",
1026
- date: "Date",
1027
- time: "Time",
1028
- datetime: "DateTime",
1029
- timestamp: "DateTime"
1030
- };
1031
- const GENERIC_MORPH_TYPENAME = "GenericMorph";
1032
- const KINDS = {
1033
- type: "type",
1034
- component: "component",
1035
- dynamicZone: "dynamic-zone",
1036
- enum: "enum",
1037
- entity: "entity",
1038
- entityResponse: "entity-response",
1039
- entityResponseCollection: "entity-response-collection",
1040
- relationResponseCollection: "relation-response-collection",
1041
- query: "query",
1042
- mutation: "mutation",
1043
- input: "input",
1044
- filtersInput: "filters-input",
1045
- scalar: "scalar",
1046
- morph: "polymorphic",
1047
- internal: "internal"
1048
- };
1049
- const allOperators = [
1050
- "and",
1051
- "or",
1052
- "not",
1053
- "eq",
1054
- "eqi",
1055
- "ne",
1056
- "nei",
1057
- "startsWith",
1058
- "endsWith",
1059
- "contains",
1060
- "notContains",
1061
- "containsi",
1062
- "notContainsi",
1063
- "gt",
1064
- "gte",
1065
- "lt",
1066
- "lte",
1067
- "null",
1068
- "notNull",
1069
- "in",
1070
- "notIn",
1071
- "between"
1072
- ];
1073
- const GRAPHQL_SCALAR_OPERATORS = {
1074
- // ID
1075
- ID: allOperators,
1076
- // Booleans
1077
- Boolean: allOperators,
1078
- // Strings
1079
- String: allOperators,
1080
- // Numbers
1081
- Int: allOperators,
1082
- Long: allOperators,
1083
- Float: allOperators,
1084
- // Dates
1085
- Date: allOperators,
1086
- Time: allOperators,
1087
- DateTime: allOperators,
1088
- // Others
1089
- JSON: allOperators
1090
- };
1091
- const ERROR_CODES = {
1092
- emptyDynamicZone: "dynamiczone.empty"
1093
- };
1094
- const constants = () => ({
1095
- PAGINATION_TYPE_NAME,
1096
- RESPONSE_COLLECTION_META_TYPE_NAME,
1097
- PUBLICATION_STATE_TYPE_NAME,
1098
- GRAPHQL_SCALARS,
1099
- STRAPI_SCALARS,
1100
- GENERIC_MORPH_TYPENAME,
1101
- KINDS,
1102
- GRAPHQL_SCALAR_OPERATORS,
1103
- SCALARS_ASSOCIATIONS,
1104
- ERROR_CODES,
1105
- ERROR_TYPE_NAME
1106
- });
1107
- const SortArg = arg({
1108
- type: list("String"),
1109
- default: []
1110
- });
1111
- const publicationState$1 = ({ strapi: strapi2 }) => {
1112
- const { PUBLICATION_STATE_TYPE_NAME: PUBLICATION_STATE_TYPE_NAME2 } = strapi2.plugin("graphql").service("constants");
1113
- return arg({
1114
- type: PUBLICATION_STATE_TYPE_NAME2,
1115
- default: "live"
1116
- });
1117
- };
1118
- const PaginationInputType = inputObjectType({
1119
- name: "PaginationArg",
1120
- definition(t) {
1121
- t.int("page");
1122
- t.int("pageSize");
1123
- t.int("start");
1124
- t.int("limit");
1125
- }
1126
- });
1127
- const PaginationArg = arg({
1128
- type: PaginationInputType,
1129
- default: {}
1130
- });
1131
- const args = (context) => ({
1132
- SortArg,
1133
- PaginationArg,
1134
- PublicationStateArg: publicationState$1(context)
1135
- });
1136
- const { ValidationError: ValidationError$2 } = errors;
1137
- const TimeScalar = new GraphQLScalarType({
1138
- name: "Time",
1139
- description: "A time string with format HH:mm:ss.SSS",
1140
- serialize(value) {
1141
- return parseType({ type: "time", value });
1142
- },
1143
- parseValue(value) {
1144
- return parseType({ type: "time", value });
1145
- },
1146
- parseLiteral(ast) {
1147
- if (ast.kind !== Kind.STRING) {
1148
- throw new ValidationError$2("Time cannot represent non string type");
1149
- }
1150
- const { value } = ast;
1151
- return parseType({ type: "time", value });
1152
- }
1153
- });
1154
- const parseAndCast = (parseFn) => (...args2) => {
1155
- const parsedValue = parseFn(...args2);
1156
- if (parsedValue instanceof Date) {
1157
- return parsedValue.toISOString().split("T")[0];
1158
- }
1159
- return parsedValue;
1160
- };
1161
- GraphQLDate.parseValue = parseAndCast(GraphQLDate.parseValue);
1162
- GraphQLDate.parseLiteral = parseAndCast(GraphQLDate.parseLiteral);
1163
- const scalars = () => ({
1164
- JSON: asNexusMethod(GraphQLJSON, "json"),
1165
- DateTime: asNexusMethod(GraphQLDateTime, "dateTime"),
1166
- Time: asNexusMethod(TimeScalar, "time"),
1167
- Date: asNexusMethod(GraphQLDate, "date"),
1168
- Long: asNexusMethod(GraphQLLong, "long"),
1169
- Upload: asNexusMethod(GraphQLUpload, "upload")
1170
- });
1171
- const pagination = ({ strapi: strapi2 }) => {
1172
- const { PAGINATION_TYPE_NAME: PAGINATION_TYPE_NAME2 } = strapi2.plugin("graphql").service("constants");
1173
- return {
1174
- /**
1175
- * Type definition for a Pagination object
1176
- * @type {NexusObjectTypeDef}
1177
- */
1178
- Pagination: objectType({
1179
- name: PAGINATION_TYPE_NAME2,
1180
- definition(t) {
1181
- t.nonNull.int("total");
1182
- t.nonNull.int("page");
1183
- t.nonNull.int("pageSize");
1184
- t.nonNull.int("pageCount");
1185
- }
1186
- })
1187
- };
1188
- };
1189
- const buildResponseCollectionMeta = ({ strapi: strapi2 }) => {
1190
- const { RESPONSE_COLLECTION_META_TYPE_NAME: RESPONSE_COLLECTION_META_TYPE_NAME2, PAGINATION_TYPE_NAME: PAGINATION_TYPE_NAME2 } = strapi2.plugin("graphql").service("constants");
1191
- return {
1192
- /**
1193
- * A shared type definition used in EntitiesResponseCollection
1194
- * to have information about the collection as a whole
1195
- * @type {NexusObjectTypeDef}
1196
- */
1197
- ResponseCollectionMeta: objectType({
1198
- name: RESPONSE_COLLECTION_META_TYPE_NAME2,
1199
- definition(t) {
1200
- t.nonNull.field("pagination", {
1201
- type: PAGINATION_TYPE_NAME2,
1202
- async resolve(parent, _childArgs, ctx) {
1203
- const { args: args2, resourceUID } = parent;
1204
- const { start, limit } = args2;
1205
- const safeLimit = Math.max(limit, 1);
1206
- const contentType2 = strapi2.getModel(resourceUID);
1207
- await validate.contentAPI.query(args2, contentType2, {
1208
- auth: ctx?.state?.auth
1209
- });
1210
- const sanitizedQuery = await sanitize.contentAPI.query(args2, contentType2, {
1211
- auth: ctx?.state?.auth
1212
- });
1213
- const total = await strapi2.entityService.count(resourceUID, sanitizedQuery);
1214
- const pageSize = limit === -1 ? total - start : safeLimit;
1215
- const pageCount = limit === -1 ? safeLimit : Math.ceil(total / safeLimit);
1216
- const page = limit === -1 ? safeLimit : Math.floor(start / safeLimit) + 1;
1217
- return { total, page, pageSize, pageCount };
1218
- }
1219
- });
1220
- }
1221
- })
1222
- };
1223
- };
1224
- const publicationState = ({ strapi: strapi2 }) => {
1225
- const { PUBLICATION_STATE_TYPE_NAME: PUBLICATION_STATE_TYPE_NAME2 } = strapi2.plugin("graphql").service("constants");
1226
- return {
1227
- /**
1228
- * An enum type definition representing a publication state
1229
- * @type {NexusEnumTypeDef}
1230
- */
1231
- PublicationState: enumType({
1232
- name: PUBLICATION_STATE_TYPE_NAME2,
1233
- members: {
1234
- // Published only
1235
- LIVE: "live",
1236
- // Published & draft
1237
- PREVIEW: "preview"
1238
- }
1239
- })
1240
- };
1241
- };
1242
- const buildScalarFilters = ({ strapi: strapi2 }) => {
1243
- const { naming: naming2, mappers: mappers2 } = strapi2.plugin("graphql").service("utils");
1244
- const { helpers: helpers2 } = strapi2.plugin("graphql").service("internals");
1245
- return helpers2.getEnabledScalars().reduce((acc, type) => {
1246
- const operators2 = mappers2.graphqlScalarToOperators(type);
1247
- const typeName = naming2.getScalarFilterInputTypeName(type);
1248
- if (!operators2 || operators2.length === 0) {
1249
- return acc;
1250
- }
1251
- return {
1252
- ...acc,
1253
- [typeName]: inputObjectType({
1254
- name: typeName,
1255
- definition(t) {
1256
- for (const operator of operators2) {
1257
- operator.add(t, type);
1258
- }
1259
- }
1260
- })
1261
- };
1262
- }, {});
1263
- };
1264
- const filters$1 = (context) => ({
1265
- scalars: buildScalarFilters(context)
1266
- });
1267
- const { ValidationError: ValidationError$1 } = errors;
1268
- const error = ({ strapi: strapi2 }) => {
1269
- const { ERROR_CODES: ERROR_CODES2, ERROR_TYPE_NAME: ERROR_TYPE_NAME2 } = strapi2.plugin("graphql").service("constants");
1270
- return objectType({
1271
- name: ERROR_TYPE_NAME2,
1272
- definition(t) {
1273
- t.nonNull.string("code", {
1274
- resolve(parent) {
1275
- const code = get("code", parent);
1276
- const isValidPlaceholderCode = Object.values(ERROR_CODES2).includes(code);
1277
- if (!isValidPlaceholderCode) {
1278
- throw new ValidationError$1(`"${code}" is not a valid code value`);
1279
- }
1280
- return code;
1281
- }
1282
- });
1283
- t.string("message");
1284
- }
1285
- });
1286
- };
1287
- const types = (context) => () => {
1288
- const { strapi: strapi2 } = context;
1289
- const { KINDS: KINDS2 } = strapi2.plugin("graphql").service("constants");
1290
- return {
1291
- [KINDS2.internal]: {
1292
- error: error(context),
1293
- pagination: pagination(context),
1294
- responseCollectionMeta: buildResponseCollectionMeta(context)
1295
- },
1296
- [KINDS2.enum]: {
1297
- publicationState: publicationState(context)
1298
- },
1299
- [KINDS2.filtersInput]: {
1300
- ...filters$1(context)
1301
- }
1302
- };
1303
- };
1304
- const getEnabledScalars = ({ strapi: strapi2 }) => () => {
1305
- const { GRAPHQL_SCALAR_OPERATORS: GRAPHQL_SCALAR_OPERATORS2 } = strapi2.plugin("graphql").service("constants");
1306
- return Object.entries(GRAPHQL_SCALAR_OPERATORS2).filter(([, value]) => value.length > 0).map(first);
1307
- };
1308
- const helpers = (context) => ({
1309
- getEnabledScalars: getEnabledScalars(context)
1310
- });
1311
- const internals = (context) => ({
1312
- args: args(context),
1313
- scalars: scalars(),
1314
- buildInternalTypes: types(context),
1315
- helpers: helpers(context)
1316
- });
1317
- const buildEnumTypeDefinition = (definition, name) => {
1318
- return enumType({
1319
- name,
1320
- members: definition.enum.reduce(
1321
- (acc, value) => set(toRegressedEnumValue(value), value, acc),
1322
- {}
1323
- )
1324
- });
1325
- };
1326
- const enums = () => ({
1327
- buildEnumTypeDefinition
1328
- });
1329
- const { ApplicationError: ApplicationError$1 } = errors;
1330
- const dynamicZone = ({ strapi: strapi2 }) => {
1331
- const buildTypeDefinition = (name, components) => {
1332
- const { ERROR_TYPE_NAME: ERROR_TYPE_NAME2 } = strapi2.plugin("graphql").service("constants");
1333
- const isEmpty2 = components.length === 0;
1334
- const componentsTypeNames = components.map((componentUID) => {
1335
- const component = strapi2.components[componentUID];
1336
- if (!component) {
1337
- throw new ApplicationError$1(
1338
- `Trying to create a dynamic zone type with an unknown component: "${componentUID}"`
1339
- );
1340
- }
1341
- return component.globalId;
1342
- });
1343
- return unionType({
1344
- name,
1345
- resolveType(obj) {
1346
- if (isEmpty2) {
1347
- return ERROR_TYPE_NAME2;
1348
- }
1349
- return strapi2.components[obj.__component].globalId;
1350
- },
1351
- definition(t) {
1352
- t.members(...componentsTypeNames, ERROR_TYPE_NAME2);
1353
- }
1354
- });
1355
- };
1356
- const buildInputDefinition = (name, components) => {
1357
- const parseData = (value) => {
1358
- const component = Object.values(strapi2.components).find(
1359
- (component2) => component2.globalId === value.__typename
1360
- );
1361
- if (!component) {
1362
- throw new ApplicationError$1(
1363
- `Component not found. expected one of: ${components.map((uid) => strapi2.components[uid].globalId).join(", ")}`
1364
- );
1365
- }
1366
- return {
1367
- __component: component.uid,
1368
- ...omit(["__typename"], value)
1369
- };
1370
- };
1371
- return scalarType({
1372
- name,
1373
- serialize: (value) => value,
1374
- parseValue: (value) => parseData(value),
1375
- parseLiteral(ast, variables) {
1376
- if (ast.kind !== Kind.OBJECT) {
1377
- return void 0;
1378
- }
1379
- const value = valueFromASTUntyped(ast, variables);
1380
- return parseData(value);
1381
- }
1382
- });
1383
- };
1384
- return {
1385
- /**
1386
- * Build a Nexus dynamic zone type from a Strapi dz attribute
1387
- * @param {object} definition - The definition of the dynamic zone
1388
- * @param {string} name - the name of the dynamic zone
1389
- * @param {string} inputName - the name of the dynamic zone's input
1390
- * @return {[NexusUnionTypeDef, NexusScalarTypeDef]}
1391
- */
1392
- buildDynamicZoneDefinition(definition, name, inputName) {
1393
- const { components } = definition;
1394
- const typeDefinition = buildTypeDefinition(name, components);
1395
- const inputDefinition = buildInputDefinition(inputName, components);
1396
- return [typeDefinition, inputDefinition];
1397
- }
1398
- };
1399
- };
1400
- const entity = ({ strapi: strapi2 }) => {
1401
- const { naming: naming2 } = strapi2.plugin("graphql").service("utils");
1402
- return {
1403
- /**
1404
- * Build a higher level type for a content type which contains the attributes, the ID and the metadata
1405
- * @param {object} contentType The content type which will be used to build its entity type
1406
- * @return {NexusObjectTypeDef}
1407
- */
1408
- buildEntityDefinition(contentType2) {
1409
- const { attributes: attributes2 } = contentType2;
1410
- const name = naming2.getEntityName(contentType2);
1411
- const typeName = naming2.getTypeName(contentType2);
1412
- return objectType({
1413
- name,
1414
- definition(t) {
1415
- t.id("id", { resolve: prop("id") });
1416
- if (!isEmpty(attributes2)) {
1417
- t.field("attributes", {
1418
- type: typeName,
1419
- resolve: identity
1420
- });
1421
- }
1422
- }
1423
- });
1424
- }
1425
- };
1426
- };
1427
- function buildEntityMetaDefinition() {
1428
- }
1429
- const entityMeta = () => ({
1430
- buildEntityMetaDefinition
1431
- });
1432
- const typeBuilder = (context) => {
1433
- const { strapi: strapi2 } = context;
1434
- const getGraphQLService = strapi2.plugin("graphql").service;
1435
- const extension = getGraphQLService("extension");
1436
- const addScalarAttribute = (options) => {
1437
- const { builder, attributeName, attribute } = options;
1438
- const { mappers: mappers2 } = getGraphQLService("utils");
1439
- const gqlType = mappers2.strapiScalarToGraphQLScalar(attribute.type);
1440
- builder.field(attributeName, { type: gqlType });
1441
- };
1442
- const addComponentAttribute = (options) => {
1443
- const { builder, attributeName, contentType: contentType2, attribute } = options;
1444
- let localBuilder = builder;
1445
- const { naming: naming2 } = getGraphQLService("utils");
1446
- const { getContentTypeArgs } = getGraphQLService("builders").utils;
1447
- const { buildComponentResolver } = getGraphQLService("builders").get("content-api");
1448
- const type = naming2.getComponentNameFromAttribute(attribute);
1449
- if (attribute.repeatable) {
1450
- localBuilder = localBuilder.list;
1451
- }
1452
- const targetComponent = strapi2.getModel(attribute.component);
1453
- const resolve = buildComponentResolver({
1454
- contentTypeUID: contentType2.uid,
1455
- attributeName,
1456
- strapi: strapi2
1457
- });
1458
- const args2 = getContentTypeArgs(targetComponent, { multiple: !!attribute.repeatable });
1459
- localBuilder.field(attributeName, { type, resolve, args: args2 });
1460
- };
1461
- const addDynamicZoneAttribute = (options) => {
1462
- const { builder, attributeName, contentType: contentType2 } = options;
1463
- const { naming: naming2 } = getGraphQLService("utils");
1464
- const { ERROR_CODES: ERROR_CODES2 } = getGraphQLService("constants");
1465
- const { buildDynamicZoneResolver } = getGraphQLService("builders").get("content-api");
1466
- const { components } = contentType2.attributes[attributeName];
1467
- const isEmpty2 = components.length === 0;
1468
- const type = naming2.getDynamicZoneName(contentType2, attributeName);
1469
- const resolve = isEmpty2 ? (
1470
- // If the dynamic zone don't have any component, then return an error payload
1471
- constant({
1472
- code: ERROR_CODES2.emptyDynamicZone,
1473
- message: `This dynamic zone don't have any component attached to it`
1474
- })
1475
- ) : (
1476
- // Else, return a classic dynamic-zone resolver
1477
- buildDynamicZoneResolver({
1478
- contentTypeUID: contentType2.uid,
1479
- attributeName
1480
- })
1481
- );
1482
- builder.list.field(attributeName, { type, resolve });
1483
- };
1484
- const addEnumAttribute = (options) => {
1485
- const { builder, attributeName, contentType: contentType2 } = options;
1486
- const { naming: naming2 } = getGraphQLService("utils");
1487
- const type = naming2.getEnumName(contentType2, attributeName);
1488
- builder.field(attributeName, { type });
1489
- };
1490
- const addMediaAttribute = (options) => {
1491
- const { naming: naming2 } = getGraphQLService("utils");
1492
- const { getContentTypeArgs } = getGraphQLService("builders").utils;
1493
- const { buildAssociationResolver } = getGraphQLService("builders").get("content-api");
1494
- const extension2 = getGraphQLService("extension");
1495
- const { builder } = options;
1496
- const { attributeName, attribute, contentType: contentType2 } = options;
1497
- const fileUID = "plugin::upload.file";
1498
- if (extension2.shadowCRUD(fileUID).isDisabled()) {
1499
- return;
1500
- }
1501
- const fileContentType = strapi2.contentTypes[fileUID];
1502
- const resolve = buildAssociationResolver({
1503
- contentTypeUID: contentType2.uid,
1504
- attributeName,
1505
- strapi: strapi2
1506
- });
1507
- const args2 = attribute.multiple ? getContentTypeArgs(fileContentType) : void 0;
1508
- const type = attribute.multiple ? naming2.getRelationResponseCollectionName(fileContentType) : naming2.getEntityResponseName(fileContentType);
1509
- builder.field(attributeName, { type, resolve, args: args2 });
1510
- };
1511
- const addPolymorphicRelationalAttribute = (options) => {
1512
- const { GENERIC_MORPH_TYPENAME: GENERIC_MORPH_TYPENAME2 } = getGraphQLService("constants");
1513
- const { naming: naming2 } = getGraphQLService("utils");
1514
- const { buildAssociationResolver } = getGraphQLService("builders").get("content-api");
1515
- let { builder } = options;
1516
- const { attributeName, attribute, contentType: contentType2 } = options;
1517
- const { target } = attribute;
1518
- const isToManyRelation = attribute.relation.endsWith("Many");
1519
- if (isToManyRelation) {
1520
- builder = builder.list;
1521
- }
1522
- const resolve = buildAssociationResolver({
1523
- contentTypeUID: contentType2.uid,
1524
- attributeName,
1525
- strapi: strapi2
1526
- });
1527
- if (isUndefined(target)) {
1528
- builder.field(attributeName, {
1529
- type: GENERIC_MORPH_TYPENAME2,
1530
- resolve
1531
- });
1532
- } else if (isArray(target) && target.every(isString)) {
1533
- const type = naming2.getMorphRelationTypeName(contentType2, attributeName);
1534
- builder.field(attributeName, { type, resolve });
1535
- }
1536
- };
1537
- const addRegularRelationalAttribute = (options) => {
1538
- const { naming: naming2 } = getGraphQLService("utils");
1539
- const { getContentTypeArgs } = getGraphQLService("builders").utils;
1540
- const { buildAssociationResolver } = getGraphQLService("builders").get("content-api");
1541
- const extension2 = getGraphQLService("extension");
1542
- const { builder } = options;
1543
- const { attributeName, attribute, contentType: contentType2 } = options;
1544
- if (extension2.shadowCRUD(attribute.target).isDisabled()) {
1545
- return;
1546
- }
1547
- const isToManyRelation = attribute.relation.endsWith("Many");
1548
- const resolve = buildAssociationResolver({
1549
- contentTypeUID: contentType2.uid,
1550
- attributeName,
1551
- strapi: strapi2
1552
- });
1553
- const targetContentType = strapi2.getModel(attribute.target);
1554
- const type = isToManyRelation ? naming2.getRelationResponseCollectionName(targetContentType) : naming2.getEntityResponseName(targetContentType);
1555
- const args2 = isToManyRelation ? getContentTypeArgs(targetContentType) : void 0;
1556
- const resolverPath = `${naming2.getTypeName(contentType2)}.${attributeName}`;
1557
- const resolverScope = `${targetContentType.uid}.find`;
1558
- extension2.use({ resolversConfig: { [resolverPath]: { auth: { scope: [resolverScope] } } } });
1559
- builder.field(attributeName, { type, resolve, args: args2 });
1560
- };
1561
- const isNotPrivate = (contentType2) => (attributeName) => {
1562
- return !contentTypes.isPrivateAttribute(contentType2, attributeName);
1563
- };
1564
- const isNotDisabled = (contentType2) => (attributeName) => {
1565
- return extension.shadowCRUD(contentType2.uid).field(attributeName).hasOutputEnabled();
1566
- };
1567
- return {
1568
- /**
1569
- * Create a type definition for a given content type
1570
- * @param contentType - The content type used to created the definition
1571
- * @return {NexusObjectTypeDef}
1572
- */
1573
- buildTypeDefinition(contentType2) {
1574
- const utils2 = getGraphQLService("utils");
1575
- const { getComponentName, getTypeName } = utils2.naming;
1576
- const {
1577
- isStrapiScalar,
1578
- isComponent,
1579
- isDynamicZone,
1580
- isEnumeration,
1581
- isMedia,
1582
- isMorphRelation,
1583
- isRelation
1584
- } = utils2.attributes;
1585
- const { attributes: attributes2, modelType } = contentType2;
1586
- const attributesKey = Object.keys(attributes2);
1587
- const name = (modelType === "component" ? getComponentName : getTypeName).call(
1588
- null,
1589
- contentType2
1590
- );
1591
- return objectType({
1592
- name,
1593
- definition(t) {
1594
- if (modelType === "component" && isNotDisabled(contentType2)("id")) {
1595
- t.nonNull.id("id");
1596
- }
1597
- attributesKey.filter(isNotPrivate(contentType2)).filter(isNotDisabled(contentType2)).forEach((attributeName) => {
1598
- const attribute = attributes2[attributeName];
1599
- let builder = t;
1600
- if (attribute.required) {
1601
- builder = builder.nonNull;
1602
- }
1603
- const options = {
1604
- builder,
1605
- attributeName,
1606
- attribute,
1607
- contentType: contentType2,
1608
- context
1609
- };
1610
- if (isEnumeration(attribute)) {
1611
- addEnumAttribute(options);
1612
- } else if (isStrapiScalar(attribute)) {
1613
- addScalarAttribute(options);
1614
- } else if (isComponent(attribute)) {
1615
- addComponentAttribute(options);
1616
- } else if (isDynamicZone(attribute)) {
1617
- addDynamicZoneAttribute(options);
1618
- } else if (isMedia(attribute)) {
1619
- addMediaAttribute(options);
1620
- } else if (isMorphRelation(attribute)) {
1621
- addPolymorphicRelationalAttribute(options);
1622
- } else if (isRelation(attribute)) {
1623
- addRegularRelationalAttribute(options);
1624
- }
1625
- });
1626
- }
1627
- });
1628
- }
1629
- };
1630
- };
1631
- const response = ({ strapi: strapi2 }) => {
1632
- const { naming: naming2 } = strapi2.plugin("graphql").service("utils");
1633
- return {
1634
- /**
1635
- * Build a type definition for a content API response for a given content type
1636
- */
1637
- buildResponseDefinition(contentType2) {
1638
- const name = naming2.getEntityResponseName(contentType2);
1639
- const entityName = naming2.getEntityName(contentType2);
1640
- return objectType({
1641
- name,
1642
- definition(t) {
1643
- t.field("data", {
1644
- type: entityName,
1645
- resolve: prop("value")
1646
- });
1647
- }
1648
- });
1649
- }
1650
- };
1651
- };
1652
- const responseCollection = ({ strapi: strapi2 }) => {
1653
- const { naming: naming2 } = strapi2.plugin("graphql").service("utils");
1654
- const { RESPONSE_COLLECTION_META_TYPE_NAME: RESPONSE_COLLECTION_META_TYPE_NAME2 } = strapi2.plugin("graphql").service("constants");
1655
- return {
1656
- /**
1657
- * Build a type definition for a content API collection response for a given content type
1658
- * @param {Schema.ContentType} contentType The content type which will be used to build its content API response definition
1659
- * @return {NexusObjectTypeDef}
1660
- */
1661
- buildResponseCollectionDefinition(contentType2) {
1662
- const name = naming2.getEntityResponseCollectionName(contentType2);
1663
- const entityName = naming2.getEntityName(contentType2);
1664
- return objectType({
1665
- name,
1666
- definition(t) {
1667
- t.nonNull.list.field("data", {
1668
- type: nonNull(entityName),
1669
- resolve: pipe(prop("nodes"), defaultTo([]))
1670
- });
1671
- t.nonNull.field("meta", {
1672
- type: RESPONSE_COLLECTION_META_TYPE_NAME2,
1673
- // Pass down the args stored in the source object
1674
- resolve: prop("info")
1675
- });
1676
- }
1677
- });
1678
- }
1679
- };
1680
- };
1681
- const relationResponseCollection = ({ strapi: strapi2 }) => {
1682
- const { naming: naming2 } = strapi2.plugin("graphql").service("utils");
1683
- return {
1684
- /**
1685
- * Build a type definition for a content API relation's collection response for a given content type
1686
- */
1687
- buildRelationResponseCollectionDefinition(contentType2) {
1688
- const name = naming2.getRelationResponseCollectionName(contentType2);
1689
- const entityName = naming2.getEntityName(contentType2);
1690
- return objectType({
1691
- name,
1692
- definition(t) {
1693
- t.nonNull.list.field("data", {
1694
- type: nonNull(entityName),
1695
- resolve: pipe(prop("nodes"), defaultTo([]))
1696
- });
1697
- }
1698
- });
1699
- }
1700
- };
1701
- };
1702
- const createCollectionTypeQueriesBuilder = ({ strapi: strapi2 }) => {
1703
- const { service: getService } = strapi2.plugin("graphql");
1704
- const { naming: naming2 } = getService("utils");
1705
- const { transformArgs, getContentTypeArgs } = getService("builders").utils;
1706
- const { toEntityResponse, toEntityResponseCollection } = getService("format").returnTypes;
1707
- const {
1708
- getFindOneQueryName,
1709
- getEntityResponseName,
1710
- getFindQueryName,
1711
- getEntityResponseCollectionName
1712
- } = naming2;
1713
- const buildCollectionTypeQueries = (contentType2) => {
1714
- const findOneQueryName = `Query.${getFindOneQueryName(contentType2)}`;
1715
- const findQueryName = `Query.${getFindQueryName(contentType2)}`;
1716
- const extension = getService("extension");
1717
- const registerAuthConfig = (action, auth) => {
1718
- return extension.use({ resolversConfig: { [action]: { auth } } });
1719
- };
1720
- const isActionEnabled = (action) => {
1721
- return extension.shadowCRUD(contentType2.uid).isActionEnabled(action);
1722
- };
1723
- const isFindOneEnabled = isActionEnabled("findOne");
1724
- const isFindEnabled = isActionEnabled("find");
1725
- if (isFindOneEnabled) {
1726
- registerAuthConfig(findOneQueryName, { scope: [`${contentType2.uid}.findOne`] });
1727
- }
1728
- if (isFindEnabled) {
1729
- registerAuthConfig(findQueryName, { scope: [`${contentType2.uid}.find`] });
1730
- }
1731
- return extendType({
1732
- type: "Query",
1733
- definition(t) {
1734
- if (isFindOneEnabled) {
1735
- addFindOneQuery(t, contentType2);
1736
- }
1737
- if (isFindEnabled) {
1738
- addFindQuery(t, contentType2);
1739
- }
1740
- }
1741
- });
1742
- };
1743
- const addFindOneQuery = (t, contentType2) => {
1744
- const { uid } = contentType2;
1745
- const findOneQueryName = getFindOneQueryName(contentType2);
1746
- const responseTypeName = getEntityResponseName(contentType2);
1747
- t.field(findOneQueryName, {
1748
- type: responseTypeName,
1749
- args: getContentTypeArgs(contentType2, { multiple: false }),
1750
- async resolve(parent, args2, ctx) {
1751
- const transformedArgs = transformArgs(args2, { contentType: contentType2 });
1752
- const { findOne } = getService("builders").get("content-api").buildQueriesResolvers({ contentType: contentType2 });
1753
- const value = findOne(parent, transformedArgs, ctx);
1754
- return toEntityResponse(value, { args: transformedArgs, resourceUID: uid });
1755
- }
1756
- });
1757
- };
1758
- const addFindQuery = (t, contentType2) => {
1759
- const { uid } = contentType2;
1760
- const findQueryName = getFindQueryName(contentType2);
1761
- const responseCollectionTypeName = getEntityResponseCollectionName(contentType2);
1762
- t.field(findQueryName, {
1763
- type: responseCollectionTypeName,
1764
- args: getContentTypeArgs(contentType2),
1765
- async resolve(parent, args2, ctx) {
1766
- const transformedArgs = transformArgs(args2, { contentType: contentType2, usePagination: true });
1767
- const { find } = getService("builders").get("content-api").buildQueriesResolvers({ contentType: contentType2 });
1768
- const nodes = await find(parent, transformedArgs, ctx);
1769
- return toEntityResponseCollection(nodes, { args: transformedArgs, resourceUID: uid });
1770
- }
1771
- });
1772
- };
1773
- return { buildCollectionTypeQueries };
1774
- };
1775
- const createSingleTypeQueriesBuilder = ({ strapi: strapi2 }) => {
1776
- const { service: getService } = strapi2.plugin("graphql");
1777
- const { naming: naming2 } = getService("utils");
1778
- const { transformArgs, getContentTypeArgs } = getService("builders").utils;
1779
- const { toEntityResponse } = getService("format").returnTypes;
1780
- const { getFindOneQueryName, getEntityResponseName } = naming2;
1781
- const buildSingleTypeQueries = (contentType2) => {
1782
- const findQueryName = `Query.${getFindOneQueryName(contentType2)}`;
1783
- const extension = getService("extension");
1784
- const registerAuthConfig = (action, auth) => {
1785
- return extension.use({ resolversConfig: { [action]: { auth } } });
1786
- };
1787
- const isActionEnabled = (action) => {
1788
- return extension.shadowCRUD(contentType2.uid).isActionEnabled(action);
1789
- };
1790
- const isFindEnabled = isActionEnabled("find");
1791
- if (isFindEnabled) {
1792
- registerAuthConfig(findQueryName, { scope: [`${contentType2.uid}.find`] });
1793
- }
1794
- return extendType({
1795
- type: "Query",
1796
- definition(t) {
1797
- if (isFindEnabled) {
1798
- addFindQuery(t, contentType2);
1799
- }
1800
- }
1801
- });
1802
- };
1803
- const addFindQuery = (t, contentType2) => {
1804
- const { uid } = contentType2;
1805
- const findQueryName = getFindOneQueryName(contentType2);
1806
- const responseTypeName = getEntityResponseName(contentType2);
1807
- t.field(findQueryName, {
1808
- type: responseTypeName,
1809
- args: getContentTypeArgs(contentType2),
1810
- async resolve(parent, args2, ctx) {
1811
- const transformedArgs = transformArgs(args2, { contentType: contentType2 });
1812
- const queriesResolvers2 = getService("builders").get("content-api").buildQueriesResolvers({ contentType: contentType2 });
1813
- const value = queriesResolvers2.find(parent, transformedArgs, ctx);
1814
- return toEntityResponse(value, { args: transformedArgs, resourceUID: uid });
1815
- }
1816
- });
1817
- };
1818
- return { buildSingleTypeQueries };
1819
- };
1820
- const queries = (context) => ({
1821
- ...createCollectionTypeQueriesBuilder(context),
1822
- ...createSingleTypeQueriesBuilder(context)
1823
- });
1824
- const createCollectionTypeMutationsBuilder = ({ strapi: strapi2 }) => {
1825
- const { service: getService } = strapi2.plugin("graphql");
1826
- const { naming: naming2 } = getService("utils");
1827
- const { transformArgs } = getService("builders").utils;
1828
- const { toEntityResponse } = getService("format").returnTypes;
1829
- const {
1830
- getCreateMutationTypeName,
1831
- getUpdateMutationTypeName,
1832
- getDeleteMutationTypeName,
1833
- getEntityResponseName,
1834
- getContentTypeInputName
1835
- } = naming2;
1836
- const addCreateMutation = (t, contentType2) => {
1837
- const { uid } = contentType2;
1838
- const createMutationName = getCreateMutationTypeName(contentType2);
1839
- const responseTypeName = getEntityResponseName(contentType2);
1840
- t.field(createMutationName, {
1841
- type: responseTypeName,
1842
- args: {
1843
- // Create payload
1844
- data: nonNull(getContentTypeInputName(contentType2))
1845
- },
1846
- async resolve(parent, args2, context) {
1847
- const { auth } = context.state;
1848
- const transformedArgs = transformArgs(args2, { contentType: contentType2 });
1849
- const sanitizedInputData = await sanitize.contentAPI.input(
1850
- transformedArgs.data,
1851
- contentType2,
1852
- { auth }
1853
- );
1854
- Object.assign(transformedArgs, { data: sanitizedInputData });
1855
- const { create } = getService("builders").get("content-api").buildMutationsResolvers({ contentType: contentType2 });
1856
- const value = await create(parent, transformedArgs);
1857
- return toEntityResponse(value, { args: transformedArgs, resourceUID: uid });
1858
- }
1859
- });
1860
- };
1861
- const addUpdateMutation = (t, contentType2) => {
1862
- const { uid } = contentType2;
1863
- const updateMutationName = getUpdateMutationTypeName(contentType2);
1864
- const responseTypeName = getEntityResponseName(contentType2);
1865
- t.field(updateMutationName, {
1866
- type: responseTypeName,
1867
- args: {
1868
- // Query args
1869
- id: nonNull("ID"),
1870
- // todo[v4]: Don't allow to filter using every unique attributes for now
1871
- // ...uniqueAttributes,
1872
- // Update payload
1873
- data: nonNull(getContentTypeInputName(contentType2))
1874
- },
1875
- async resolve(parent, args2, context) {
1876
- const { auth } = context.state;
1877
- const transformedArgs = transformArgs(args2, { contentType: contentType2 });
1878
- const sanitizedInputData = await sanitize.contentAPI.input(
1879
- transformedArgs.data,
1880
- contentType2,
1881
- { auth }
1882
- );
1883
- Object.assign(transformedArgs, { data: sanitizedInputData });
1884
- const { update } = getService("builders").get("content-api").buildMutationsResolvers({ contentType: contentType2 });
1885
- const value = await update(parent, transformedArgs);
1886
- return toEntityResponse(value, { args: transformedArgs, resourceUID: uid });
1887
- }
1888
- });
1889
- };
1890
- const addDeleteMutation = (t, contentType2) => {
1891
- const { uid } = contentType2;
1892
- const deleteMutationName = getDeleteMutationTypeName(contentType2);
1893
- const responseTypeName = getEntityResponseName(contentType2);
1894
- t.field(deleteMutationName, {
1895
- type: responseTypeName,
1896
- args: {
1897
- // Query args
1898
- id: nonNull("ID")
1899
- // todo[v4]: Don't allow to filter using every unique attributes for now
1900
- // ...uniqueAttributes,
1901
- },
1902
- async resolve(parent, args2, ctx) {
1903
- const transformedArgs = transformArgs(args2, { contentType: contentType2 });
1904
- const { delete: deleteResolver } = getService("builders").get("content-api").buildMutationsResolvers({ contentType: contentType2 });
1905
- const value = await deleteResolver(parent, args2, ctx);
1906
- return toEntityResponse(value, { args: transformedArgs, resourceUID: uid });
1907
- }
1908
- });
1909
- };
1910
- return {
1911
- buildCollectionTypeMutations(contentType2) {
1912
- const createMutationName = `Mutation.${getCreateMutationTypeName(contentType2)}`;
1913
- const updateMutationName = `Mutation.${getUpdateMutationTypeName(contentType2)}`;
1914
- const deleteMutationName = `Mutation.${getDeleteMutationTypeName(contentType2)}`;
1915
- const extension = getService("extension");
1916
- const registerAuthConfig = (action, auth) => {
1917
- return extension.use({ resolversConfig: { [action]: { auth } } });
1918
- };
1919
- const isActionEnabled = (action) => {
1920
- return extension.shadowCRUD(contentType2.uid).isActionEnabled(action);
1921
- };
1922
- const isCreateEnabled = isActionEnabled("create");
1923
- const isUpdateEnabled = isActionEnabled("update");
1924
- const isDeleteEnabled = isActionEnabled("delete");
1925
- if (isCreateEnabled) {
1926
- registerAuthConfig(createMutationName, { scope: [`${contentType2.uid}.create`] });
1927
- }
1928
- if (isUpdateEnabled) {
1929
- registerAuthConfig(updateMutationName, { scope: [`${contentType2.uid}.update`] });
1930
- }
1931
- if (isDeleteEnabled) {
1932
- registerAuthConfig(deleteMutationName, { scope: [`${contentType2.uid}.delete`] });
1933
- }
1934
- return extendType({
1935
- type: "Mutation",
1936
- definition(t) {
1937
- if (isCreateEnabled) {
1938
- addCreateMutation(t, contentType2);
1939
- }
1940
- if (isUpdateEnabled) {
1941
- addUpdateMutation(t, contentType2);
1942
- }
1943
- if (isDeleteEnabled) {
1944
- addDeleteMutation(t, contentType2);
1945
- }
1946
- }
1947
- });
1948
- }
1949
- };
1950
- };
1951
- const { NotFoundError } = errors;
1952
- const createSingleTypeMutationsBuilder = ({ strapi: strapi2 }) => {
1953
- const { service: getService } = strapi2.plugin("graphql");
1954
- const { naming: naming2 } = getService("utils");
1955
- const { transformArgs } = getService("builders").utils;
1956
- const { toEntityResponse } = getService("format").returnTypes;
1957
- const {
1958
- getUpdateMutationTypeName,
1959
- getEntityResponseName,
1960
- getContentTypeInputName,
1961
- getDeleteMutationTypeName
1962
- } = naming2;
1963
- const addUpdateMutation = (t, contentType2) => {
1964
- const { uid } = contentType2;
1965
- const updateMutationName = getUpdateMutationTypeName(contentType2);
1966
- const responseTypeName = getEntityResponseName(contentType2);
1967
- t.field(updateMutationName, {
1968
- type: responseTypeName,
1969
- args: {
1970
- // Update payload
1971
- data: nonNull(getContentTypeInputName(contentType2))
1972
- },
1973
- async resolve(parent, args2, context) {
1974
- const { auth } = context.state;
1975
- const transformedArgs = transformArgs(args2, { contentType: contentType2 });
1976
- const sanitizedInputData = await sanitize.contentAPI.input(
1977
- transformedArgs.data,
1978
- contentType2,
1979
- { auth }
1980
- );
1981
- Object.assign(transformedArgs, { data: sanitizedInputData });
1982
- const { create, update } = getService("builders").get("content-api").buildMutationsResolvers({ contentType: contentType2 });
1983
- await validate.contentAPI.query(omit(["data", "files"], transformedArgs), contentType2, {
1984
- auth
1985
- });
1986
- const sanitizedQuery = await sanitize.contentAPI.query(
1987
- omit(["data", "files"], transformedArgs),
1988
- contentType2,
1989
- {
1990
- auth
1991
- }
1992
- );
1993
- const entity2 = await strapi2.entityService.findMany(uid, sanitizedQuery);
1994
- const value = isNil(entity2) ? create(parent, transformedArgs) : update(uid, { id: entity2.id, data: transformedArgs.data });
1995
- return toEntityResponse(value, { args: transformedArgs, resourceUID: uid });
1996
- }
1997
- });
1998
- };
1999
- const addDeleteMutation = (t, contentType2) => {
2000
- const { uid } = contentType2;
2001
- const deleteMutationName = getDeleteMutationTypeName(contentType2);
2002
- const responseTypeName = getEntityResponseName(contentType2);
2003
- t.field(deleteMutationName, {
2004
- type: responseTypeName,
2005
- args: {},
2006
- async resolve(parent, args2, ctx) {
2007
- const transformedArgs = transformArgs(args2, { contentType: contentType2 });
2008
- const { delete: deleteResolver } = getService("builders").get("content-api").buildMutationsResolvers({ contentType: contentType2 });
2009
- await validate.contentAPI.query(transformedArgs, contentType2, { auth: ctx?.state?.auth });
2010
- const sanitizedQuery = await sanitize.contentAPI.query(transformedArgs, contentType2, {
2011
- auth: ctx?.state?.auth
2012
- });
2013
- const entity2 = await strapi2.entityService.findMany(uid, sanitizedQuery);
2014
- if (!entity2) {
2015
- throw new NotFoundError("Entity not found");
2016
- }
2017
- const value = await deleteResolver(parent, { id: entity2.id, params: transformedArgs });
2018
- return toEntityResponse(value, { args: transformedArgs, resourceUID: uid });
2019
- }
2020
- });
2021
- };
2022
- return {
2023
- buildSingleTypeMutations(contentType2) {
2024
- const updateMutationName = `Mutation.${getUpdateMutationTypeName(contentType2)}`;
2025
- const deleteMutationName = `Mutation.${getDeleteMutationTypeName(contentType2)}`;
2026
- const extension = getService("extension");
2027
- const registerAuthConfig = (action, auth) => {
2028
- return extension.use({ resolversConfig: { [action]: { auth } } });
2029
- };
2030
- const isActionEnabled = (action) => {
2031
- return extension.shadowCRUD(contentType2.uid).isActionEnabled(action);
2032
- };
2033
- const isUpdateEnabled = isActionEnabled("update");
2034
- const isDeleteEnabled = isActionEnabled("delete");
2035
- if (isUpdateEnabled) {
2036
- registerAuthConfig(updateMutationName, { scope: [`${contentType2.uid}.update`] });
2037
- }
2038
- if (isDeleteEnabled) {
2039
- registerAuthConfig(deleteMutationName, { scope: [`${contentType2.uid}.delete`] });
2040
- }
2041
- return extendType({
2042
- type: "Mutation",
2043
- definition(t) {
2044
- if (isUpdateEnabled) {
2045
- addUpdateMutation(t, contentType2);
2046
- }
2047
- if (isDeleteEnabled) {
2048
- addDeleteMutation(t, contentType2);
2049
- }
2050
- }
2051
- });
2052
- }
2053
- };
2054
- };
2055
- const mutations = (context) => ({
2056
- ...createCollectionTypeMutationsBuilder(context),
2057
- ...createSingleTypeMutationsBuilder(context)
2058
- });
2059
- const contentType = ({ strapi: strapi2 }) => {
2060
- const rootLevelOperators = () => {
2061
- const { operators: operators2 } = strapi2.plugin("graphql").service("builders").filters;
2062
- return [operators2.and, operators2.or, operators2.not];
2063
- };
2064
- const addScalarAttribute = (builder, attributeName, attribute) => {
2065
- const { naming: naming2, mappers: mappers2 } = strapi2.plugin("graphql").service("utils");
2066
- const gqlType = mappers2.strapiScalarToGraphQLScalar(attribute.type);
2067
- builder.field(attributeName, { type: naming2.getScalarFilterInputTypeName(gqlType) });
2068
- };
2069
- const addRelationalAttribute = (builder, attributeName, attribute) => {
2070
- const utils2 = strapi2.plugin("graphql").service("utils");
2071
- const extension = strapi2.plugin("graphql").service("extension");
2072
- const { getFiltersInputTypeName } = utils2.naming;
2073
- const { isMorphRelation } = utils2.attributes;
2074
- const model = "target" in attribute && strapi2.getModel(attribute.target);
2075
- if (!model || isMorphRelation(attribute))
2076
- return;
2077
- if (extension.shadowCRUD(model.uid).isDisabled())
2078
- return;
2079
- builder.field(attributeName, { type: getFiltersInputTypeName(model) });
2080
- };
2081
- const addComponentAttribute = (builder, attributeName, attribute) => {
2082
- const utils2 = strapi2.plugin("graphql").service("utils");
2083
- const extension = strapi2.plugin("graphql").service("extension");
2084
- const { getFiltersInputTypeName } = utils2.naming;
2085
- const component = strapi2.getModel(attribute.component);
2086
- if (!component)
2087
- return;
2088
- if (extension.shadowCRUD(component.uid).isDisabled())
2089
- return;
2090
- builder.field(attributeName, { type: getFiltersInputTypeName(component) });
2091
- };
2092
- const buildContentTypeFilters = (contentType2) => {
2093
- const utils2 = strapi2.plugin("graphql").service("utils");
2094
- const extension = strapi2.plugin("graphql").service("extension");
2095
- const { getFiltersInputTypeName, getScalarFilterInputTypeName } = utils2.naming;
2096
- const { isStrapiScalar, isRelation, isComponent } = utils2.attributes;
2097
- const { attributes: attributes2 } = contentType2;
2098
- const filtersTypeName = getFiltersInputTypeName(contentType2);
2099
- return inputObjectType({
2100
- name: filtersTypeName,
2101
- definition(t) {
2102
- const validAttributes = Object.entries(attributes2).filter(
2103
- ([attributeName]) => extension.shadowCRUD(contentType2.uid).field(attributeName).hasFiltersEnabeld()
2104
- );
2105
- const isIDFilterEnabled = extension.shadowCRUD(contentType2.uid).field("id").hasFiltersEnabeld();
2106
- if (contentType2.kind === "collectionType" && isIDFilterEnabled) {
2107
- t.field("id", { type: getScalarFilterInputTypeName("ID") });
2108
- }
2109
- for (const [attributeName, attribute] of validAttributes) {
2110
- if (isStrapiScalar(attribute)) {
2111
- addScalarAttribute(t, attributeName, attribute);
2112
- } else if (isRelation(attribute)) {
2113
- addRelationalAttribute(t, attributeName, attribute);
2114
- } else if (isComponent(attribute)) {
2115
- addComponentAttribute(t, attributeName, attribute);
2116
- }
2117
- }
2118
- for (const operator of rootLevelOperators()) {
2119
- operator.add(t, filtersTypeName);
2120
- }
2121
- }
2122
- });
2123
- };
2124
- return {
2125
- buildContentTypeFilters
2126
- };
2127
- };
2128
- const filters = (context) => ({
2129
- ...contentType(context)
2130
- });
2131
- const { isWritableAttribute } = contentTypes;
2132
- const inputs = ({ strapi: strapi2 }) => {
2133
- const { naming: naming2, mappers: mappers2, attributes: attributes2 } = strapi2.plugin("graphql").service("utils");
2134
- const extension = strapi2.plugin("graphql").service("extension");
2135
- const { getComponentInputName, getContentTypeInputName, getEnumName, getDynamicZoneInputName } = naming2;
2136
- const {
2137
- isStrapiScalar,
2138
- isRelation,
2139
- isMorphRelation,
2140
- isMedia,
2141
- isEnumeration,
2142
- isComponent,
2143
- isDynamicZone
2144
- } = attributes2;
2145
- return {
2146
- buildInputType(contentType2) {
2147
- const { attributes: attributes22, modelType } = contentType2;
2148
- const name = (modelType === "component" ? getComponentInputName : getContentTypeInputName).call(null, contentType2);
2149
- return inputObjectType({
2150
- name,
2151
- definition(t) {
2152
- const isFieldEnabled = (fieldName) => {
2153
- return extension.shadowCRUD(contentType2.uid).field(fieldName).hasInputEnabled();
2154
- };
2155
- const validAttributes = Object.entries(attributes22).filter(([attributeName]) => {
2156
- return isWritableAttribute(contentType2, attributeName) && isFieldEnabled(attributeName);
2157
- });
2158
- if (modelType === "component" && isFieldEnabled("id")) {
2159
- t.id("id");
2160
- }
2161
- validAttributes.forEach(([attributeName, attribute]) => {
2162
- if (isEnumeration(attribute)) {
2163
- const enumTypeName = getEnumName(contentType2, attributeName);
2164
- t.field(attributeName, { type: enumTypeName });
2165
- } else if (isStrapiScalar(attribute)) {
2166
- const gqlScalar = mappers2.strapiScalarToGraphQLScalar(attribute.type);
2167
- t.field(attributeName, { type: gqlScalar });
2168
- } else if (isMedia(attribute)) {
2169
- const isMultiple = attribute.multiple === true;
2170
- if (extension.shadowCRUD("plugin::upload.file").isDisabled()) {
2171
- return;
2172
- }
2173
- if (isMultiple) {
2174
- t.list.id(attributeName);
2175
- } else {
2176
- t.id(attributeName);
2177
- }
2178
- } else if (isRelation(attribute) && !isMorphRelation(attribute)) {
2179
- if (extension.shadowCRUD(attribute.target).isDisabled()) {
2180
- return;
2181
- }
2182
- const isToManyRelation = attribute.relation.endsWith("Many");
2183
- if (isToManyRelation) {
2184
- t.list.id(attributeName);
2185
- } else {
2186
- t.id(attributeName);
2187
- }
2188
- } else if (isComponent(attribute)) {
2189
- const isRepeatable = attribute.repeatable === true;
2190
- const component = strapi2.components[attribute.component];
2191
- const componentInputType = getComponentInputName(component);
2192
- if (isRepeatable) {
2193
- t.list.field(attributeName, { type: componentInputType });
2194
- } else {
2195
- t.field(attributeName, { type: componentInputType });
2196
- }
2197
- } else if (isDynamicZone(attribute)) {
2198
- const dzInputName = getDynamicZoneInputName(contentType2, attributeName);
2199
- t.list.field(attributeName, { type: nonNull(dzInputName) });
2200
- }
2201
- });
2202
- }
2203
- });
2204
- }
2205
- };
2206
- };
2207
- const genericMorph = ({ strapi: strapi2, registry }) => {
2208
- const { naming: naming2 } = strapi2.plugin("graphql").service("utils");
2209
- const { KINDS: KINDS2, GENERIC_MORPH_TYPENAME: GENERIC_MORPH_TYPENAME2 } = strapi2.plugin("graphql").service("constants");
2210
- return {
2211
- buildGenericMorphDefinition() {
2212
- return unionType({
2213
- name: GENERIC_MORPH_TYPENAME2,
2214
- resolveType(obj) {
2215
- const contentType2 = strapi2.getModel(obj.__type);
2216
- if (!contentType2) {
2217
- return null;
2218
- }
2219
- if (contentType2.modelType === "component") {
2220
- return naming2.getComponentName(contentType2);
2221
- }
2222
- return naming2.getTypeName(contentType2);
2223
- },
2224
- definition(t) {
2225
- const members = registry.where(({ config: config2 }) => [KINDS2.type, KINDS2.component].includes(config2.kind)).map(prop("name"));
2226
- t.members(...members);
2227
- }
2228
- });
2229
- }
2230
- };
2231
- };
2232
- const { ApplicationError } = errors;
2233
- const associationResolvers = ({ strapi: strapi2 }) => {
2234
- const { service: getGraphQLService } = strapi2.plugin("graphql");
2235
- const { isMorphRelation, isMedia } = getGraphQLService("utils").attributes;
2236
- const { transformArgs } = getGraphQLService("builders").utils;
2237
- const { toEntityResponse, toEntityResponseCollection } = getGraphQLService("format").returnTypes;
2238
- return {
2239
- buildAssociationResolver({
2240
- contentTypeUID,
2241
- attributeName
2242
- }) {
2243
- const contentType2 = strapi2.getModel(contentTypeUID);
2244
- const attribute = contentType2.attributes[attributeName];
2245
- if (!attribute) {
2246
- throw new ApplicationError(
2247
- `Failed to build an association resolver for ${contentTypeUID}::${attributeName}`
2248
- );
2249
- }
2250
- const isMediaAttribute = isMedia(attribute);
2251
- const isMorphAttribute = isMorphRelation(attribute);
2252
- const targetUID = isMediaAttribute ? "plugin::upload.file" : attribute.target;
2253
- const isToMany = isMediaAttribute ? attribute.multiple : attribute.relation.endsWith("Many");
2254
- const targetContentType = strapi2.getModel(targetUID);
2255
- return async (parent, args2 = {}, context = {}) => {
2256
- const { auth } = context.state;
2257
- const transformedArgs = transformArgs(args2, {
2258
- contentType: targetContentType,
2259
- usePagination: true
2260
- });
2261
- await validate.contentAPI.query(transformedArgs, targetContentType, {
2262
- auth
2263
- });
2264
- const sanitizedQuery = await sanitize.contentAPI.query(transformedArgs, targetContentType, {
2265
- auth
2266
- });
2267
- const data = await strapi2.entityService.load(
2268
- contentTypeUID,
2269
- parent,
2270
- attributeName,
2271
- sanitizedQuery
2272
- );
2273
- const info = {
2274
- args: sanitizedQuery,
2275
- resourceUID: targetUID
2276
- };
2277
- if (isMorphAttribute) {
2278
- const wrapData = (dataToWrap) => ({ [attributeName]: dataToWrap });
2279
- const sanitizeData = (dataToSanitize) => {
2280
- return sanitize.contentAPI.output(dataToSanitize, contentType2, { auth });
2281
- };
2282
- const unwrapData = get(attributeName);
2283
- const sanitizeMorphAttribute = pipeAsync(wrapData, sanitizeData, unwrapData);
2284
- return sanitizeMorphAttribute(data);
2285
- }
2286
- if (isToMany) {
2287
- return toEntityResponseCollection(data, info);
2288
- }
2289
- return toEntityResponse(data, info);
2290
- };
2291
- }
2292
- };
2293
- };
2294
- const queriesResolvers = ({ strapi: strapi2 }) => ({
2295
- buildQueriesResolvers({ contentType: contentType2 }) {
2296
- const { uid } = contentType2;
2297
- return {
2298
- async find(parent, args2, ctx) {
2299
- await validate.contentAPI.query(args2, contentType2, {
2300
- auth: ctx?.state?.auth
2301
- });
2302
- const sanitizedQuery = await sanitize.contentAPI.query(args2, contentType2, {
2303
- auth: ctx?.state?.auth
2304
- });
2305
- return strapi2.entityService.findMany(uid, sanitizedQuery);
2306
- },
2307
- async findOne(parent, args2, ctx) {
2308
- await validate.contentAPI.query(args2, contentType2, {
2309
- auth: ctx?.state?.auth
2310
- });
2311
- const sanitizedQuery = await sanitize.contentAPI.query(args2, contentType2, {
2312
- auth: ctx?.state?.auth
2313
- });
2314
- return strapi2.entityService.findOne(uid, args2.id, omit("id", sanitizedQuery));
2315
- }
2316
- };
2317
- }
2318
- });
2319
- const pickCreateArgs = pick(["params", "data", "files"]);
2320
- const mutationsResolvers = ({ strapi: strapi2 }) => ({
2321
- buildMutationsResolvers({ contentType: contentType2 }) {
2322
- const { uid } = contentType2;
2323
- return {
2324
- async create(parent, args2) {
2325
- const params = pickCreateArgs(args2);
2326
- return strapi2.entityService.create(uid, params);
2327
- },
2328
- async update(parent, args2) {
2329
- const { id, data } = args2;
2330
- return strapi2.entityService.update(uid, id, { data });
2331
- },
2332
- async delete(parent, args2, ctx) {
2333
- const { id, ...rest } = args2;
2334
- await validate.contentAPI.query(rest, contentType2, {
2335
- auth: ctx?.state?.auth
2336
- });
2337
- const sanitizedQuery = await sanitize.contentAPI.query(rest, contentType2, {
2338
- auth: ctx?.state?.auth
2339
- });
2340
- return strapi2.entityService.delete(uid, id, sanitizedQuery);
2341
- }
2342
- };
2343
- }
2344
- });
2345
- const componentResolvers = ({ strapi: strapi2 }) => ({
2346
- buildComponentResolver({
2347
- contentTypeUID,
2348
- attributeName
2349
- }) {
2350
- const { transformArgs } = strapi2.plugin("graphql").service("builders").utils;
2351
- return async (parent, args2, ctx) => {
2352
- const contentType2 = strapi2.getModel(contentTypeUID);
2353
- const { component: componentName } = contentType2.attributes[attributeName];
2354
- const component = strapi2.getModel(componentName);
2355
- const transformedArgs = transformArgs(args2, { contentType: component, usePagination: true });
2356
- await validate.contentAPI.query(transformedArgs, component, {
2357
- auth: ctx?.state?.auth
2358
- });
2359
- const sanitizedQuery = await sanitize.contentAPI.query(transformedArgs, component, {
2360
- auth: ctx?.state?.auth
2361
- });
2362
- return strapi2.entityService.load(contentTypeUID, parent, attributeName, sanitizedQuery);
2363
- };
2364
- }
2365
- });
2366
- const dynamicZoneResolvers = ({ strapi: strapi2 }) => ({
2367
- buildDynamicZoneResolver({
2368
- contentTypeUID,
2369
- attributeName
2370
- }) {
2371
- return async (parent) => {
2372
- return strapi2.entityService.load(contentTypeUID, parent, attributeName);
2373
- };
2374
- }
2375
- });
2376
- const resolvers = (context) => ({
2377
- // Generics
2378
- ...associationResolvers(context),
2379
- // Builders
2380
- ...mutationsResolvers(context),
2381
- ...queriesResolvers(context),
2382
- ...componentResolvers(context),
2383
- ...dynamicZoneResolvers(context)
2384
- });
2385
- const AND_FIELD_NAME = "and";
2386
- const andOperator = () => ({
2387
- fieldName: AND_FIELD_NAME,
2388
- strapiOperator: "$and",
2389
- add(t, type) {
2390
- t.field(AND_FIELD_NAME, { type: list(type) });
2391
- }
2392
- });
2393
- const OR_FIELD_NAME = "or";
2394
- const orOperator = () => ({
2395
- fieldName: OR_FIELD_NAME,
2396
- strapiOperator: "$or",
2397
- add(t, type) {
2398
- t.field(OR_FIELD_NAME, { type: list(type) });
2399
- }
2400
- });
2401
- const NOT_FIELD_NAME = "not";
2402
- const notOperator = ({ strapi: strapi2 }) => ({
2403
- fieldName: NOT_FIELD_NAME,
2404
- strapiOperator: "$not",
2405
- add(t, type) {
2406
- const { naming: naming2, attributes: attributes2 } = strapi2.plugin("graphql").service("utils");
2407
- if (attributes2.isGraphQLScalar({ type })) {
2408
- t.field(NOT_FIELD_NAME, { type: naming2.getScalarFilterInputTypeName(type) });
2409
- } else {
2410
- t.field(NOT_FIELD_NAME, { type });
2411
- }
2412
- }
2413
- });
2414
- const { ValidationError } = errors;
2415
- const EQ_FIELD_NAME = "eq";
2416
- const eqOperator = ({ strapi: strapi2 }) => ({
2417
- fieldName: EQ_FIELD_NAME,
2418
- strapiOperator: "$eq",
2419
- add(t, type) {
2420
- const { GRAPHQL_SCALARS: GRAPHQL_SCALARS2 } = strapi2.plugin("graphql").service("constants");
2421
- if (!GRAPHQL_SCALARS2.includes(type)) {
2422
- throw new ValidationError(
2423
- `Can't use "${EQ_FIELD_NAME}" operator. "${type}" is not a valid scalar`
2424
- );
2425
- }
2426
- t.field(EQ_FIELD_NAME, { type });
2427
- }
2428
- });
2429
- const EQI_FIELD_NAME = "eqi";
2430
- const eqiOperator = () => ({
2431
- fieldName: EQI_FIELD_NAME,
2432
- strapiOperator: "$eqi",
2433
- add(t, type) {
2434
- t.field(EQI_FIELD_NAME, { type });
2435
- }
2436
- });
2437
- const NE_FIELD_NAME = "ne";
2438
- const neOperator = () => ({
2439
- fieldName: NE_FIELD_NAME,
2440
- strapiOperator: "$ne",
2441
- add(t, type) {
2442
- t.field(NE_FIELD_NAME, { type });
2443
- }
2444
- });
2445
- const NEI_FIELD_NAME = "nei";
2446
- const neiOperator = () => ({
2447
- fieldName: NEI_FIELD_NAME,
2448
- strapiOperator: "$nei",
2449
- add(t, type) {
2450
- t.field(NEI_FIELD_NAME, { type });
2451
- }
2452
- });
2453
- const STARTS_WITH_FIELD_NAME = "startsWith";
2454
- const startsWithOperator = () => ({
2455
- fieldName: STARTS_WITH_FIELD_NAME,
2456
- strapiOperator: "$startsWith",
2457
- add(t, type) {
2458
- t.field(STARTS_WITH_FIELD_NAME, { type });
2459
- }
2460
- });
2461
- const ENDS_WITH_FIELD_NAME = "endsWith";
2462
- const endsWithOperator = () => ({
2463
- fieldName: ENDS_WITH_FIELD_NAME,
2464
- strapiOperator: "$endsWith",
2465
- add(t, type) {
2466
- t.field(ENDS_WITH_FIELD_NAME, { type });
2467
- }
2468
- });
2469
- const CONTAINS_FIELD_NAME = "contains";
2470
- const containsOperator = () => ({
2471
- fieldName: CONTAINS_FIELD_NAME,
2472
- strapiOperator: "$contains",
2473
- add(t, type) {
2474
- t.field(CONTAINS_FIELD_NAME, { type });
2475
- }
2476
- });
2477
- const NOT_CONTAINS_FIELD_NAME = "notContains";
2478
- const notContainsOperator = () => ({
2479
- fieldName: NOT_CONTAINS_FIELD_NAME,
2480
- strapiOperator: "$notContains",
2481
- add(t, type) {
2482
- t.field(NOT_CONTAINS_FIELD_NAME, { type });
2483
- }
2484
- });
2485
- const CONTAINSI_FIELD_NAME = "containsi";
2486
- const containsiOperator = () => ({
2487
- fieldName: CONTAINSI_FIELD_NAME,
2488
- strapiOperator: "$containsi",
2489
- add(t, type) {
2490
- t.field(CONTAINSI_FIELD_NAME, { type });
2491
- }
2492
- });
2493
- const NOT_CONTAINSI_FIELD_NAME = "notContainsi";
2494
- const notContainsiOperator = () => ({
2495
- fieldName: NOT_CONTAINSI_FIELD_NAME,
2496
- strapiOperator: "$notContainsi",
2497
- add(t, type) {
2498
- t.field(NOT_CONTAINSI_FIELD_NAME, { type });
2499
- }
2500
- });
2501
- const GT_FIELD_NAME = "gt";
2502
- const gtOperator = () => ({
2503
- fieldName: GT_FIELD_NAME,
2504
- strapiOperator: "$gt",
2505
- add(t, type) {
2506
- t.field(GT_FIELD_NAME, { type });
2507
- }
2508
- });
2509
- const GTE_FIELD_NAME = "gte";
2510
- const gteOperator = () => ({
2511
- fieldName: GTE_FIELD_NAME,
2512
- strapiOperator: "$gte",
2513
- add(t, type) {
2514
- t.field(GTE_FIELD_NAME, { type });
2515
- }
2516
- });
2517
- const LT_FIELD_NAME = "lt";
2518
- const ltOperator = () => ({
2519
- fieldName: LT_FIELD_NAME,
2520
- strapiOperator: "$lt",
2521
- add(t, type) {
2522
- t.field(LT_FIELD_NAME, { type });
2523
- }
2524
- });
2525
- const LTE_FIELD_NAME = "lte";
2526
- const lteOperator = () => ({
2527
- fieldName: LTE_FIELD_NAME,
2528
- strapiOperator: "$lte",
2529
- add(t, type) {
2530
- t.field(LTE_FIELD_NAME, { type });
2531
- }
2532
- });
2533
- const NULL_FIELD_NAME = "null";
2534
- const nullOperator = () => ({
2535
- fieldName: NULL_FIELD_NAME,
2536
- strapiOperator: "$null",
2537
- add(t) {
2538
- t.boolean(NULL_FIELD_NAME);
2539
- }
2540
- });
2541
- const NOT_NULL_FIELD_NAME = "notNull";
2542
- const notNullOperator = () => ({
2543
- fieldName: NOT_NULL_FIELD_NAME,
2544
- strapiOperator: "$notNull",
2545
- add(t) {
2546
- t.boolean(NOT_NULL_FIELD_NAME);
2547
- }
2548
- });
2549
- const IN_FIELD_NAME = "in";
2550
- const inOperator = () => ({
2551
- fieldName: IN_FIELD_NAME,
2552
- strapiOperator: "$in",
2553
- add(t, type) {
2554
- t.field(IN_FIELD_NAME, { type: list(type) });
2555
- }
2556
- });
2557
- const NOT_IN_FIELD_NAME = "notIn";
2558
- const notInOperator = () => ({
2559
- fieldName: NOT_IN_FIELD_NAME,
2560
- strapiOperator: "$notIn",
2561
- add(t, type) {
2562
- t.field(NOT_IN_FIELD_NAME, { type: list(type) });
2563
- }
2564
- });
2565
- const BETWEEN_FIELD_NAME = "between";
2566
- const betweenOperator = () => ({
2567
- fieldName: BETWEEN_FIELD_NAME,
2568
- strapiOperator: "$between",
2569
- add(t, type) {
2570
- t.field(BETWEEN_FIELD_NAME, { type: list(type) });
2571
- }
2572
- });
2573
- const operators = {
2574
- and: andOperator,
2575
- or: orOperator,
2576
- not: notOperator,
2577
- eq: eqOperator,
2578
- eqi: eqiOperator,
2579
- ne: neOperator,
2580
- nei: neiOperator,
2581
- startsWith: startsWithOperator,
2582
- endsWith: endsWithOperator,
2583
- contains: containsOperator,
2584
- notContains: notContainsOperator,
2585
- containsi: containsiOperator,
2586
- notContainsi: notContainsiOperator,
2587
- gt: gtOperator,
2588
- gte: gteOperator,
2589
- lt: ltOperator,
2590
- lte: lteOperator,
2591
- null: nullOperator,
2592
- notNull: notNullOperator,
2593
- in: inOperator,
2594
- notIn: notInOperator,
2595
- between: betweenOperator
2596
- };
2597
- const operators$1 = ({ strapi: strapi2 }) => mapValues((opCtor) => opCtor({ strapi: strapi2 }), operators);
2598
- const { withDefaultPagination } = pagination$1;
2599
- const { hasDraftAndPublish } = contentTypes;
2600
- const utils = ({ strapi: strapi2 }) => {
2601
- const { service: getService } = strapi2.plugin("graphql");
2602
- return {
2603
- /**
2604
- * Get every args for a given content type
2605
- * @param {object} contentType
2606
- * @param {object} options
2607
- * @param {boolean} options.multiple
2608
- * @return {object}
2609
- */
2610
- getContentTypeArgs(contentType2, { multiple = true } = {}) {
2611
- const { naming: naming2 } = getService("utils");
2612
- const { args: args2 } = getService("internals");
2613
- const { modelType } = contentType2;
2614
- if (modelType === "component") {
2615
- if (!multiple)
2616
- return {};
2617
- return {
2618
- filters: naming2.getFiltersInputTypeName(contentType2),
2619
- pagination: args2.PaginationArg,
2620
- sort: args2.SortArg
2621
- };
2622
- }
2623
- const { kind } = contentType2;
2624
- if (kind === "collectionType") {
2625
- if (!multiple) {
2626
- return { id: "ID" };
2627
- }
2628
- const params = {
2629
- filters: naming2.getFiltersInputTypeName(contentType2),
2630
- pagination: args2.PaginationArg,
2631
- sort: args2.SortArg
2632
- };
2633
- if (hasDraftAndPublish(contentType2)) {
2634
- Object.assign(params, { publicationState: args2.PublicationStateArg });
2635
- }
2636
- return params;
2637
- }
2638
- if (kind === "singleType") {
2639
- const params = {};
2640
- if (hasDraftAndPublish(contentType2)) {
2641
- Object.assign(params, { publicationState: args2.PublicationStateArg });
2642
- }
2643
- return params;
2644
- }
2645
- },
2646
- /**
2647
- * Filter an object entries and keep only those whose value is a unique scalar attribute
2648
- */
2649
- getUniqueScalarAttributes(attributes2) {
2650
- const { isStrapiScalar } = getService("utils").attributes;
2651
- const uniqueAttributes = entries(attributes2).filter(
2652
- ([, attribute]) => isStrapiScalar(attribute) && "unique" in attribute && attribute.unique
2653
- );
2654
- return Object.fromEntries(uniqueAttributes);
2655
- },
2656
- /**
2657
- * Map each value from an attribute to a FiltersInput type name
2658
- * @param {object} attributes - The attributes object to transform
2659
- * @return {Object<string, string>}
2660
- */
2661
- scalarAttributesToFiltersMap(attributes2) {
2662
- return mapValues((attribute) => {
2663
- const { mappers: mappers2, naming: naming2 } = getService("utils");
2664
- const gqlScalar = mappers2.strapiScalarToGraphQLScalar(attribute.type);
2665
- return naming2.getScalarFilterInputTypeName(gqlScalar);
2666
- }, attributes2);
2667
- },
2668
- /**
2669
- * Apply basic transform to GQL args
2670
- */
2671
- transformArgs(args2, {
2672
- contentType: contentType2,
2673
- usePagination = false
2674
- }) {
2675
- const { mappers: mappers2 } = getService("utils");
2676
- const { config: config2 } = strapi2.plugin("graphql");
2677
- const { pagination: pagination2 = {}, filters: filters2 = {} } = args2;
2678
- const newArgs = omit(["pagination", "filters"], args2);
2679
- if (usePagination) {
2680
- const defaultLimit = config2("defaultLimit");
2681
- const maxLimit = config2("maxLimit");
2682
- Object.assign(
2683
- newArgs,
2684
- withDefaultPagination(pagination2, {
2685
- maxLimit,
2686
- defaults: {
2687
- offset: { limit: defaultLimit },
2688
- page: { pageSize: defaultLimit }
2689
- }
2690
- })
2691
- );
2692
- }
2693
- if (args2.filters) {
2694
- Object.assign(newArgs, {
2695
- filters: mappers2.graphQLFiltersToStrapiQuery(filters2, contentType2)
2696
- });
2697
- }
2698
- return newArgs;
2699
- }
2700
- };
2701
- };
2702
- const buildersFactories = [
2703
- enums,
2704
- dynamicZone,
2705
- entity,
2706
- entityMeta,
2707
- typeBuilder,
2708
- response,
2709
- responseCollection,
2710
- relationResponseCollection,
2711
- queries,
2712
- mutations,
2713
- filters,
2714
- inputs,
2715
- genericMorph,
2716
- resolvers
2717
- ];
2718
- const builders = ({ strapi: strapi2 }) => {
2719
- const buildersMap = /* @__PURE__ */ new Map();
2720
- return {
2721
- /**
2722
- * Instantiate every builder with a strapi instance & a type registry
2723
- */
2724
- new(name, registry) {
2725
- const context = { strapi: strapi2, registry };
2726
- const builders2 = pipe(
2727
- // Create a new instance of every builders
2728
- map((factory) => factory(context)),
2729
- // Merge every builder into the same object
2730
- reduce(merge$1, {})
2731
- ).call(null, buildersFactories);
2732
- buildersMap.set(name, builders2);
2733
- return builders2;
2734
- },
2735
- /**
2736
- * Delete a set of builders instances from
2737
- * the builders map for a given name
2738
- */
2739
- delete(name) {
2740
- buildersMap.delete(name);
2741
- },
2742
- /**
2743
- * Retrieve a set of builders instances from
2744
- * the builders map for a given name
2745
- */
2746
- get(name) {
2747
- return buildersMap.get(name);
2748
- },
2749
- filters: {
2750
- operators: operators$1({ strapi: strapi2 })
2751
- },
2752
- utils: utils({ strapi: strapi2 })
2753
- };
2754
- };
2755
- const getDefaultContentTypeConfig = () => ({
2756
- enabled: true,
2757
- mutations: true,
2758
- queries: true,
2759
- disabledActions: [],
2760
- fields: /* @__PURE__ */ new Map()
2761
- });
2762
- const getDefaultFieldConfig = () => ({
2763
- enabled: true,
2764
- input: true,
2765
- output: true,
2766
- filters: true
2767
- });
2768
- const ALL_ACTIONS = "*";
2769
- const createShadowCRUDManager = () => {
2770
- const configs = /* @__PURE__ */ new Map();
2771
- return (uid) => {
2772
- if (!configs.has(uid)) {
2773
- configs.set(uid, getDefaultContentTypeConfig());
2774
- }
2775
- return {
2776
- isEnabled() {
2777
- return configs.get(uid).enabled;
2778
- },
2779
- isDisabled() {
2780
- return !this.isEnabled();
2781
- },
2782
- areQueriesEnabled() {
2783
- return configs.get(uid).queries;
2784
- },
2785
- areQueriesDisabled() {
2786
- return !this.areQueriesEnabled();
2787
- },
2788
- areMutationsEnabled() {
2789
- return configs.get(uid).mutations;
2790
- },
2791
- areMutationsDisabled() {
2792
- return !this.areMutationsEnabled();
2793
- },
2794
- isActionEnabled(action) {
2795
- const matchingActions = [action, ALL_ACTIONS];
2796
- return configs.get(uid).disabledActions.every((action2) => !matchingActions.includes(action2));
2797
- },
2798
- isActionDisabled(action) {
2799
- return !this.isActionEnabled(action);
2800
- },
2801
- disable() {
2802
- configs.get(uid).enabled = false;
2803
- return this;
2804
- },
2805
- disableQueries() {
2806
- configs.get(uid).queries = false;
2807
- return this;
2808
- },
2809
- disableMutations() {
2810
- configs.get(uid).mutations = false;
2811
- return this;
2812
- },
2813
- disableAction(action) {
2814
- const config2 = configs.get(uid);
2815
- if (!config2.disabledActions.includes(action)) {
2816
- config2.disabledActions.push(action);
2817
- }
2818
- return this;
2819
- },
2820
- disableActions(actions = []) {
2821
- actions.forEach((action) => this.disableAction(action));
2822
- return this;
2823
- },
2824
- field(fieldName) {
2825
- const { fields } = configs.get(uid);
2826
- if (!fields.has(fieldName)) {
2827
- fields.set(fieldName, getDefaultFieldConfig());
2828
- }
2829
- return {
2830
- isEnabled() {
2831
- return fields.get(fieldName).enabled;
2832
- },
2833
- hasInputEnabled() {
2834
- return fields.get(fieldName).input;
2835
- },
2836
- hasOutputEnabled() {
2837
- return fields.get(fieldName).output;
2838
- },
2839
- hasFiltersEnabeld() {
2840
- return fields.get(fieldName).filters;
2841
- },
2842
- disable() {
2843
- fields.set(fieldName, {
2844
- enabled: false,
2845
- output: false,
2846
- input: false,
2847
- filters: false
2848
- });
2849
- return this;
2850
- },
2851
- disableOutput() {
2852
- fields.get(fieldName).output = false;
2853
- return this;
2854
- },
2855
- disableInput() {
2856
- fields.get(fieldName).input = false;
2857
- return this;
2858
- },
2859
- disableFilters() {
2860
- fields.get(fieldName).filters = false;
2861
- return this;
2862
- }
2863
- };
2864
- }
2865
- };
2866
- };
2867
- };
2868
- const getDefaultState = () => ({
2869
- types: [],
2870
- typeDefs: [],
2871
- resolvers: {},
2872
- resolversConfig: {},
2873
- plugins: []
2874
- });
2875
- const createExtension = ({ strapi: strapi2 }) => {
2876
- const configs = [];
2877
- return {
2878
- shadowCRUD: createShadowCRUDManager(),
2879
- /**
2880
- * Register a new extension configuration
2881
- */
2882
- use(configuration) {
2883
- configs.push(configuration);
2884
- return this;
2885
- },
2886
- /**
2887
- * Convert the registered configuration into a single extension object & return it
2888
- */
2889
- generate({ typeRegistry: typeRegistry2 }) {
2890
- const resolveConfig = (config2) => {
2891
- return typeof config2 === "function" ? config2({ strapi: strapi2, nexus, typeRegistry: typeRegistry2 }) : config2;
2892
- };
2893
- return configs.reduce((acc, configuration) => {
2894
- const { types: types2, typeDefs, resolvers: resolvers2, resolversConfig, plugins } = resolveConfig(configuration);
2895
- if (typeof typeDefs === "string") {
2896
- acc.typeDefs.push(typeDefs);
2897
- }
2898
- if (Array.isArray(types2)) {
2899
- acc.types.push(...types2);
2900
- }
2901
- if (Array.isArray(plugins)) {
2902
- acc.plugins.push(...plugins);
2903
- }
2904
- if (typeof resolvers2 === "object") {
2905
- acc.resolvers = merge$1(acc.resolvers, resolvers2);
2906
- }
2907
- if (typeof resolversConfig === "object") {
2908
- acc.resolversConfig = merge$1(resolversConfig, acc.resolversConfig);
2909
- }
2910
- return acc;
2911
- }, getDefaultState());
2912
- }
2913
- };
2914
- };
2915
- const returnTypes = () => ({
2916
- toEntityResponse(value, info = {}) {
2917
- const { args: args2 = {}, resourceUID } = info;
2918
- return { value, info: { args: args2, resourceUID } };
2919
- },
2920
- toEntityResponseCollection(nodes, info = {}) {
2921
- const { args: args2 = {}, resourceUID } = info;
2922
- return { nodes, info: { args: args2, resourceUID } };
2923
- }
2924
- });
2925
- const format = () => ({
2926
- returnTypes: returnTypes()
2927
- });
2928
- const services = {
2929
- builders,
2930
- "content-api": contentAPI,
2931
- constants,
2932
- extension: createExtension,
2933
- format,
2934
- internals,
2935
- "type-registry": typeRegistry,
2936
- utils: utils$1
2937
- };
2938
- const index = {
2939
- config,
2940
- bootstrap,
2941
- services
2942
- };
2943
- export {
2944
- index as default
2945
- };
1
+ import { config } from './config/index.mjs';
2
+ import { bootstrap } from './bootstrap.mjs';
3
+ import { services } from './services/index.mjs';
4
+
5
+ var index = {
6
+ config,
7
+ bootstrap,
8
+ services
9
+ };
10
+
11
+ export { index as default };
2946
12
  //# sourceMappingURL=index.mjs.map